/**
 * Copyright 2019-2020 Huawei Technologies Co., Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <gtest/gtest.h>
#include <ctime>

#include "common/formats/format_transfers/format_transfer_fractal_nz.h"

#include "common/formats/format_transfers/format_transfer.h"
#include "common/formats/formats.h"
#include "common/fp16_t.h"
#include "time.h"

namespace ge {
namespace formats {
class UtestFormatTransferNdFractNz : public testing::Test {
 protected:
  void SetUp() {}
  void TearDown() {}
};

TEST_F(UtestFormatTransferNdFractNz, nd_shape1_uint8_1) {
  uint8_t data[1] = {
      176,
  };
  uint8_t ret[1 * 1 * 32 * 32] = {
      176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {1}, {1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 32, 32}, {1}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape1_uint8_2) {
  uint8_t data[32] = {
      194, 182, 243, 9,   141, 3,  25,  168, 123, 253, 25, 2,  76, 207, 206, 214,
      212, 36,  10,  104, 185, 61, 195, 52,  187, 87,  54, 43, 87, 13,  67,  85,
  };
  uint8_t ret[1 * 1 * 32 * 32] = {
      194, 182, 243, 9,  141, 3,  25, 168, 123, 253, 25, 2, 76, 207, 206, 214, 212, 36, 10, 104, 185, 61, 195, 52, 187,
      87,  54,  43,  87, 13,  67, 85, 0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,  0,
      0,   0,   0,   0,  0,   0,  0,  0,   0,   0,   0,  0, 0,  0,   0,   0,   0,   0,  0,  0,   0,   0,  0,   0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {32}, {1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 32, 32}, {32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape1_uint8_3) {
  uint8_t data[33] = {
      173, 126, 65,  202, 177, 161, 81, 98, 165, 98,  206, 162, 209, 58,  160, 171, 124,
      99,  45,  160, 68,  125, 39,  2,  43, 36,  211, 200, 250, 63,  195, 121, 95,
  };
  uint8_t ret[2 * 1 * 32 * 32] = {
      173, 126, 65,  202, 177, 161, 81,  98, 165, 98, 206, 162, 209, 58, 160, 171, 124, 99, 45, 160, 68, 125, 39, 2, 43,
      36,  211, 200, 250, 63,  195, 121, 0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 95,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,  0, 0,
      0,   0,   0,   0,   0,   0,   0,   0,  0,   0,  0,   0,   0,   0,  0,   0,   0,   0,  0,  0,   0,  0,   0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {33}, {2, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 1, 32, 32}, {33}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape2_uint8_1) {
  uint8_t data[32 * 32] = {
      47,  78,  47,  180, 246, 76,  157, 127, 63,  0,   168, 23,  148, 198, 180, 190, 43,  187, 76,  67,  77,  246, 11,
      149, 240, 236, 136, 123, 51,  95,  7,   163, 163, 64,  157, 230, 247, 122, 67,  106, 150, 20,  231, 118, 43,  208,
      190, 201, 149, 180, 47,  223, 69,  51,  222, 2,   254, 161, 69,  17,  122, 79,  98,  85,  77,  97,  127, 144, 216,
      217, 230, 175, 115, 121, 86,  110, 81,  37,  143, 189, 23,  63,  214, 235, 188, 193, 125, 236, 57,  76,  192, 144,
      20,  2,   247, 153, 101, 114, 201, 218, 221, 62,  203, 222, 1,   229, 100, 223, 65,  62,  78,  210, 115, 149, 115,
      171, 55,  186, 67,  16,  154, 252, 104, 6,   154, 142, 129, 223, 84,  221, 82,  202, 113, 167, 143, 136, 203, 237,
      195, 40,  47,  228, 125, 49,  156, 201, 187, 96,  2,   120, 227, 239, 134, 105, 153, 232, 228, 42,  65,  11,  203,
      79,  90,  240, 54,  131, 16,  30,  171, 98,  228, 61,  160, 117, 80,  38,  223, 25,  15,  227, 245, 11,  241, 195,
      178, 250, 187, 220, 80,  77,  101, 21,  79,  194, 33,  95,  91,  165, 93,  74,  120, 124, 214, 92,  101, 181, 89,
      79,  159, 229, 184, 133, 188, 200, 200, 97,  223, 92,  42,  56,  51,  21,  103, 65,  8,   10,  25,  232, 29,  9,
      209, 126, 37,  175, 179, 92,  239, 25,  253, 53,  154, 202, 233, 11,  83,  146, 160, 3,   209, 227, 68,  162, 190,
      175, 206, 153, 230, 120, 249, 65,  105, 117, 145, 169, 247, 155, 163, 78,  184, 172, 41,  67,  49,  177, 70,  22,
      44,  205, 35,  95,  188, 140, 27,  123, 187, 116, 80,  189, 11,  161, 20,  181, 10,  159, 29,  36,  48,  165, 108,
      201, 153, 42,  64,  57,  29,  195, 190, 65,  112, 13,  150, 18,  49,  50,  168, 70,  206, 155, 58,  91,  215, 209,
      250, 76,  81,  114, 131, 159, 208, 97,  164, 238, 186, 21,  106, 179, 70,  177, 171, 204, 31,  39,  120, 161, 143,
      43,  15,  28,  218, 8,   95,  43,  134, 116, 33,  160, 123, 184, 235, 8,   245, 131, 111, 239, 159, 42,  71,  224,
      120, 169, 254, 219, 131, 234, 207, 85,  23,  117, 39,  212, 156, 210, 11,  51,  148, 198, 35,  163, 155, 102, 183,
      11,  59,  176, 17,  143, 64,  101, 7,   146, 164, 140, 18,  91,  213, 216, 103, 84,  252, 239, 31,  169, 239, 128,
      99,  7,   94,  175, 129, 185, 97,  175, 200, 231, 100, 44,  242, 246, 73,  211, 89,  143, 141, 23,  116, 118, 97,
      104, 93,  55,  118, 246, 236, 38,  58,  178, 53,  19,  2,   232, 186, 253, 109, 63,  56,  37,  242, 64,  47,  246,
      84,  23,  215, 134, 200, 20,  60,  104, 228, 36,  172, 100, 27,  128, 219, 56,  155, 233, 197, 157, 66,  122, 120,
      4,   73,  240, 165, 70,  225, 193, 40,  124, 120, 57,  213, 109, 159, 162, 254, 76,  5,   183, 184, 98,  104, 138,
      226, 53,  20,  165, 170, 84,  177, 176, 123, 223, 225, 82,  127, 241, 125, 124, 21,  109, 65,  106, 235, 254, 37,
      226, 106, 172, 188, 184, 89,  22,  20,  175, 9,   42,  166, 236, 17,  250, 249, 251, 143, 87,  185, 47,  223, 171,
      217, 43,  147, 129, 126, 175, 105, 65,  213, 205, 116, 136, 6,   126, 195, 87,  150, 85,  29,  2,   144, 10,  165,
      120, 156, 193, 246, 168, 65,  108, 250, 32,  118, 205, 95,  10,  87,  48,  13,  251, 218, 42,  197, 14,  151, 145,
      123, 5,   153, 90,  11,  207, 5,   93,  2,   131, 236, 10,  51,  157, 62,  241, 194, 45,  181, 92,  190, 7,   222,
      194, 95,  121, 31,  92,  188, 69,  39,  238, 63,  19,  155, 144, 178, 235, 34,  200, 158, 89,  69,  59,  74,  97,
      52,  25,  4,   84,  244, 65,  181, 10,  119, 34,  30,  7,   22,  239, 176, 15,  7,   159, 92,  195, 171, 101, 174,
      32,  201, 218, 20,  231, 54,  252, 158, 166, 63,  250, 45,  49,  151, 170, 208, 99,  161, 27,  122, 72,  213, 177,
      218, 140, 56,  99,  185, 216, 95,  240, 139, 108, 116, 138, 253, 146, 41,  130, 114, 66,  241, 140, 117, 196, 35,
      76,  223, 198, 248, 58,  23,  156, 9,   128, 139, 87,  125, 186, 137, 18,  41,  166, 230, 165, 44,  24,  183, 6,
      20,  84,  26,  44,  26,  173, 39,  3,   97,  146, 165, 223, 190, 231, 52,  65,  219, 183, 85,  150, 198, 53,  156,
      220, 30,  42,  95,  107, 245, 122, 93,  124, 217, 227, 188, 154, 169, 51,  246, 143, 219, 60,  180, 42,  211, 99,
      243, 128, 132, 130, 104, 103, 204, 227, 179, 236, 119, 175, 26,  33,  67,  174, 178, 94,  30,  182, 246, 58,  121,
      253, 220, 141, 141, 234, 82,  223, 199, 212, 94,  2,   95,  50,  169, 233, 109, 14,  96,  75,  214, 107, 181, 15,
      141, 180, 100, 75,  247, 159, 212, 177, 126, 166, 112, 192, 111, 100, 91,  150, 236, 62,  140, 60,  158, 150, 53,
      237, 156, 253, 37,  143, 95,  150, 66,  252, 112, 248, 115, 46,  30,  93,  21,  193, 82,  20,  185, 26,  167, 197,
      165, 161, 207, 245, 44,  58,  110, 63,  81,  169, 66,  55,  85,  56,  4,   58,  145, 226, 167, 47,  41,  176, 228,
      238, 190, 28,  111, 216, 142, 230, 229, 4,   205, 52,  105, 40,  159, 222, 41,  189, 195, 20,  254, 15,  141, 37,
      73,  136, 165, 12,  166, 70,  39,  204, 28,  113, 233, 142, 99,  4,   2,   87,  29,  165, 57,  152, 163, 167, 42,
      127, 189, 21,  164, 141, 93,  149, 142, 85,  48,  117, 38,  94,  244, 120, 80,  180, 10,  200, 80,  249, 213, 209,
      104, 27,  145, 116, 144, 180, 182, 89,  166, 127, 19,  214, 210, 165, 16,  158, 31,  166, 62,  235, 38,  229, 12,
      130, 116, 52,  230, 149, 30,  185, 119, 207, 99,  104, 228, 198, 52,  192, 69,  97,  237, 142, 19,  2,   194, 34,
      197, 4,   82,  50,  0,   101, 238, 37,  62,  153, 106, 183,
  };
  uint8_t ret[1 * 1 * 32 * 32] = {
      47,  78,  47,  180, 246, 76,  157, 127, 63,  0,   168, 23,  148, 198, 180, 190, 43,  187, 76,  67,  77,  246, 11,
      149, 240, 236, 136, 123, 51,  95,  7,   163, 163, 64,  157, 230, 247, 122, 67,  106, 150, 20,  231, 118, 43,  208,
      190, 201, 149, 180, 47,  223, 69,  51,  222, 2,   254, 161, 69,  17,  122, 79,  98,  85,  77,  97,  127, 144, 216,
      217, 230, 175, 115, 121, 86,  110, 81,  37,  143, 189, 23,  63,  214, 235, 188, 193, 125, 236, 57,  76,  192, 144,
      20,  2,   247, 153, 101, 114, 201, 218, 221, 62,  203, 222, 1,   229, 100, 223, 65,  62,  78,  210, 115, 149, 115,
      171, 55,  186, 67,  16,  154, 252, 104, 6,   154, 142, 129, 223, 84,  221, 82,  202, 113, 167, 143, 136, 203, 237,
      195, 40,  47,  228, 125, 49,  156, 201, 187, 96,  2,   120, 227, 239, 134, 105, 153, 232, 228, 42,  65,  11,  203,
      79,  90,  240, 54,  131, 16,  30,  171, 98,  228, 61,  160, 117, 80,  38,  223, 25,  15,  227, 245, 11,  241, 195,
      178, 250, 187, 220, 80,  77,  101, 21,  79,  194, 33,  95,  91,  165, 93,  74,  120, 124, 214, 92,  101, 181, 89,
      79,  159, 229, 184, 133, 188, 200, 200, 97,  223, 92,  42,  56,  51,  21,  103, 65,  8,   10,  25,  232, 29,  9,
      209, 126, 37,  175, 179, 92,  239, 25,  253, 53,  154, 202, 233, 11,  83,  146, 160, 3,   209, 227, 68,  162, 190,
      175, 206, 153, 230, 120, 249, 65,  105, 117, 145, 169, 247, 155, 163, 78,  184, 172, 41,  67,  49,  177, 70,  22,
      44,  205, 35,  95,  188, 140, 27,  123, 187, 116, 80,  189, 11,  161, 20,  181, 10,  159, 29,  36,  48,  165, 108,
      201, 153, 42,  64,  57,  29,  195, 190, 65,  112, 13,  150, 18,  49,  50,  168, 70,  206, 155, 58,  91,  215, 209,
      250, 76,  81,  114, 131, 159, 208, 97,  164, 238, 186, 21,  106, 179, 70,  177, 171, 204, 31,  39,  120, 161, 143,
      43,  15,  28,  218, 8,   95,  43,  134, 116, 33,  160, 123, 184, 235, 8,   245, 131, 111, 239, 159, 42,  71,  224,
      120, 169, 254, 219, 131, 234, 207, 85,  23,  117, 39,  212, 156, 210, 11,  51,  148, 198, 35,  163, 155, 102, 183,
      11,  59,  176, 17,  143, 64,  101, 7,   146, 164, 140, 18,  91,  213, 216, 103, 84,  252, 239, 31,  169, 239, 128,
      99,  7,   94,  175, 129, 185, 97,  175, 200, 231, 100, 44,  242, 246, 73,  211, 89,  143, 141, 23,  116, 118, 97,
      104, 93,  55,  118, 246, 236, 38,  58,  178, 53,  19,  2,   232, 186, 253, 109, 63,  56,  37,  242, 64,  47,  246,
      84,  23,  215, 134, 200, 20,  60,  104, 228, 36,  172, 100, 27,  128, 219, 56,  155, 233, 197, 157, 66,  122, 120,
      4,   73,  240, 165, 70,  225, 193, 40,  124, 120, 57,  213, 109, 159, 162, 254, 76,  5,   183, 184, 98,  104, 138,
      226, 53,  20,  165, 170, 84,  177, 176, 123, 223, 225, 82,  127, 241, 125, 124, 21,  109, 65,  106, 235, 254, 37,
      226, 106, 172, 188, 184, 89,  22,  20,  175, 9,   42,  166, 236, 17,  250, 249, 251, 143, 87,  185, 47,  223, 171,
      217, 43,  147, 129, 126, 175, 105, 65,  213, 205, 116, 136, 6,   126, 195, 87,  150, 85,  29,  2,   144, 10,  165,
      120, 156, 193, 246, 168, 65,  108, 250, 32,  118, 205, 95,  10,  87,  48,  13,  251, 218, 42,  197, 14,  151, 145,
      123, 5,   153, 90,  11,  207, 5,   93,  2,   131, 236, 10,  51,  157, 62,  241, 194, 45,  181, 92,  190, 7,   222,
      194, 95,  121, 31,  92,  188, 69,  39,  238, 63,  19,  155, 144, 178, 235, 34,  200, 158, 89,  69,  59,  74,  97,
      52,  25,  4,   84,  244, 65,  181, 10,  119, 34,  30,  7,   22,  239, 176, 15,  7,   159, 92,  195, 171, 101, 174,
      32,  201, 218, 20,  231, 54,  252, 158, 166, 63,  250, 45,  49,  151, 170, 208, 99,  161, 27,  122, 72,  213, 177,
      218, 140, 56,  99,  185, 216, 95,  240, 139, 108, 116, 138, 253, 146, 41,  130, 114, 66,  241, 140, 117, 196, 35,
      76,  223, 198, 248, 58,  23,  156, 9,   128, 139, 87,  125, 186, 137, 18,  41,  166, 230, 165, 44,  24,  183, 6,
      20,  84,  26,  44,  26,  173, 39,  3,   97,  146, 165, 223, 190, 231, 52,  65,  219, 183, 85,  150, 198, 53,  156,
      220, 30,  42,  95,  107, 245, 122, 93,  124, 217, 227, 188, 154, 169, 51,  246, 143, 219, 60,  180, 42,  211, 99,
      243, 128, 132, 130, 104, 103, 204, 227, 179, 236, 119, 175, 26,  33,  67,  174, 178, 94,  30,  182, 246, 58,  121,
      253, 220, 141, 141, 234, 82,  223, 199, 212, 94,  2,   95,  50,  169, 233, 109, 14,  96,  75,  214, 107, 181, 15,
      141, 180, 100, 75,  247, 159, 212, 177, 126, 166, 112, 192, 111, 100, 91,  150, 236, 62,  140, 60,  158, 150, 53,
      237, 156, 253, 37,  143, 95,  150, 66,  252, 112, 248, 115, 46,  30,  93,  21,  193, 82,  20,  185, 26,  167, 197,
      165, 161, 207, 245, 44,  58,  110, 63,  81,  169, 66,  55,  85,  56,  4,   58,  145, 226, 167, 47,  41,  176, 228,
      238, 190, 28,  111, 216, 142, 230, 229, 4,   205, 52,  105, 40,  159, 222, 41,  189, 195, 20,  254, 15,  141, 37,
      73,  136, 165, 12,  166, 70,  39,  204, 28,  113, 233, 142, 99,  4,   2,   87,  29,  165, 57,  152, 163, 167, 42,
      127, 189, 21,  164, 141, 93,  149, 142, 85,  48,  117, 38,  94,  244, 120, 80,  180, 10,  200, 80,  249, 213, 209,
      104, 27,  145, 116, 144, 180, 182, 89,  166, 127, 19,  214, 210, 165, 16,  158, 31,  166, 62,  235, 38,  229, 12,
      130, 116, 52,  230, 149, 30,  185, 119, 207, 99,  104, 228, 198, 52,  192, 69,  97,  237, 142, 19,  2,   194, 34,
      197, 4,   82,  50,  0,   101, 238, 37,  62,  153, 106, 183,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {32, 32}, {1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 32, 32}, {32, 32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape2_uint8_2) {
  uint8_t data[30 * 33] = {
      127, 144, 140, 41,  204, 45,  12,  150, 135, 155, 45,  38,  69,  114, 12,  212, 232, 135, 115, 165, 156, 127, 85,
      184, 113, 175, 123, 248, 81,  184, 162, 162, 56,  140, 68,  78,  157, 101, 218, 13,  133, 233, 167, 229, 236, 110,
      249, 168, 0,   45,  159, 73,  121, 70,  110, 127, 115, 171, 68,  237, 38,  121, 119, 114, 192, 105, 95,  167, 216,
      200, 80,  17,  111, 172, 206, 106, 122, 203, 51,  105, 2,   191, 38,  193, 247, 83,  252, 230, 45,  117, 215, 172,
      217, 186, 91,  241, 165, 168, 104, 205, 176, 172, 114, 232, 173, 152, 40,  15,  10,  144, 35,  120, 102, 161, 141,
      121, 191, 167, 69,  49,  69,  18,  105, 98,  56,  82,  78,  28,  150, 122, 223, 175, 125, 38,  72,  225, 248, 124,
      205, 12,  74,  18,  157, 5,   249, 179, 137, 228, 92,  50,  6,   27,  9,   207, 155, 135, 36,  3,   170, 54,  107,
      147, 225, 92,  47,  228, 234, 206, 22,  31,  28,  112, 167, 209, 46,  75,  10,  111, 113, 230, 27,  169, 225, 35,
      82,  117, 111, 2,   153, 96,  33,  243, 118, 174, 168, 164, 161, 152, 137, 161, 23,  13,  53,  51,  240, 236, 185,
      16,  62,  175, 63,  80,  97,  6,   221, 97,  103, 92,  216, 85,  225, 154, 27,  141, 146, 184, 199, 132, 216, 165,
      234, 108, 139, 49,  190, 164, 196, 195, 53,  219, 239, 87,  101, 183, 48,  98,  222, 66,  99,  172, 191, 189, 189,
      174, 131, 209, 108, 185, 141, 212, 124, 169, 117, 9,   131, 155, 107, 122, 212, 95,  9,   246, 202, 13,  188, 25,
      35,  20,  138, 155, 7,   18,  33,  251, 49,  142, 157, 215, 125, 20,  183, 8,   252, 122, 247, 11,  47,  37,  140,
      60,  12,  45,  192, 21,  176, 116, 130, 96,  64,  97,  108, 214, 58,  129, 227, 1,   94,  4,   252, 138, 100, 240,
      52,  178, 12,  148, 160, 143, 84,  60,  165, 21,  112, 249, 173, 171, 83,  218, 72,  126, 157, 45,  78,  150, 65,
      165, 107, 158, 11,  165, 136, 20,  37,  209, 141, 138, 108, 220, 69,  177, 107, 194, 144, 130, 135, 226, 106, 46,
      24,  88,  47,  67,  37,  241, 73,  129, 223, 129, 218, 127, 156, 145, 113, 53,  226, 173, 84,  230, 82,  166, 244,
      12,  219, 12,  203, 172, 118, 10,  170, 252, 179, 144, 217, 185, 130, 149, 22,  58,  38,  142, 246, 77,  186, 214,
      121, 129, 120, 125, 192, 205, 231, 165, 1,   3,   246, 53,  221, 119, 93,  140, 189, 94,  114, 75,  116, 76,  45,
      29,  93,  237, 143, 234, 225, 222, 67,  37,  98,  37,  144, 222, 49,  215, 156, 56,  185, 109, 75,  143, 36,  165,
      220, 227, 142, 19,  127, 232, 84,  235, 202, 56,  184, 204, 48,  155, 75,  183, 74,  75,  55,  77,  246, 21,  202,
      184, 248, 84,  89,  47,  213, 194, 167, 144, 184, 108, 47,  60,  78,  12,  221, 30,  169, 162, 247, 1,   96,  225,
      73,  6,   143, 192, 134, 162, 231, 174, 172, 145, 199, 45,  135, 117, 70,  218, 226, 94,  43,  215, 130, 161, 139,
      48,  231, 191, 142, 189, 140, 185, 194, 41,  230, 160, 105, 211, 130, 141, 249, 88,  240, 38,  13,  12,  152, 248,
      143, 250, 120, 215, 176, 246, 236, 131, 228, 187, 172, 136, 95,  143, 154, 59,  111, 150, 35,  82,  33,  11,  126,
      92,  205, 91,  249, 125, 7,   112, 220, 189, 234, 66,  58,  161, 149, 7,   38,  101, 109, 120, 249, 212, 164, 72,
      221, 162, 96,  31,  64,  125, 203, 74,  117, 87,  233, 21,  156, 43,  174, 89,  34,  75,  217, 164, 145, 84,  201,
      105, 178, 155, 54,  73,  176, 102, 39,  31,  138, 164, 23,  167, 250, 239, 44,  47,  181, 11,  149, 192, 92,  68,
      77,  141, 157, 194, 160, 104, 220, 229, 95,  63,  47,  242, 75,  102, 219, 60,  136, 253, 117, 31,  23,  75,  152,
      35,  44,  91,  143, 42,  15,  58,  156, 198, 93,  234, 95,  70,  238, 196, 209, 94,  12,  222, 92,  177, 87,  205,
      222, 17,  19,  67,  94,  109, 145, 156, 155, 40,  50,  188, 145, 221, 174, 61,  117, 57,  100, 151, 59,  216, 20,
      63,  1,   100, 163, 25,  111, 156, 249, 34,  54,  73,  104, 199, 156, 47,  113, 63,  251, 244, 177, 124, 45,  48,
      224, 227, 205, 218, 149, 80,  68,  80,  127, 243, 55,  127, 113, 28,  18,  30,  181, 253, 177, 197, 53,  150, 17,
      103, 195, 219, 178, 126, 167, 156, 4,   240, 69,  34,  89,  213, 200, 239, 133, 164, 42,  46,  165, 47,  121, 209,
      232, 236, 45,  89,  222, 141, 37,  128, 52,  22,  62,  148, 245, 107, 115, 250, 150, 5,   191, 158, 20,  204, 169,
      232, 98,  250, 71,  179, 74,  253, 130, 96,  110, 254, 42,  106, 196, 121, 251, 225, 67,  88,  2,   128, 101, 152,
      59,  86,  241, 200, 76,  202, 2,   26,  166, 211, 92,  63,  39,  18,  250, 116, 0,   61,  238, 71,  218, 20,  118,
      125, 144, 74,  8,   220, 15,  27,  108, 5,   36,  61,  83,  4,   190, 195, 127, 52,  250, 1,   57,  172, 234, 214,
      161, 163, 78,  80,  235, 41,  229, 141, 208, 246, 185, 50,  56,  185, 61,  47,  243, 204, 54,  172, 223, 165, 32,
      31,  125, 12,  57,  11,  20,  148, 141, 92,  107, 13,  76,  89,  59,  182, 40,  120, 21,  104, 202, 210, 61,  114,
      239, 150, 58,  38,  74,  253, 38,  163, 215, 59,  47,  185, 204, 1,   88,  133, 74,  179, 76,  25,  232, 158, 211,
      19,  181, 42,  104, 8,   191, 98,  233, 9,   16,  71,  62,  205, 195, 241, 246, 118, 180, 136, 52,  80,  127, 174,
      90,  63,  127, 196, 152, 93,  207, 243, 163, 27,  55,  17,  131, 142, 230, 83,  235, 227, 31,  151, 126, 24,  48,
      110,
  };
  uint8_t ret[2 * 1 * 32 * 32] = {
      127, 144, 140, 41,  204, 45,  12,  150, 135, 155, 45,  38,  69,  114, 12,  212, 232, 135, 115, 165, 156, 127, 85,
      184, 113, 175, 123, 248, 81,  184, 162, 162, 140, 68,  78,  157, 101, 218, 13,  133, 233, 167, 229, 236, 110, 249,
      168, 0,   45,  159, 73,  121, 70,  110, 127, 115, 171, 68,  237, 38,  121, 119, 114, 192, 95,  167, 216, 200, 80,
      17,  111, 172, 206, 106, 122, 203, 51,  105, 2,   191, 38,  193, 247, 83,  252, 230, 45,  117, 215, 172, 217, 186,
      91,  241, 165, 168, 205, 176, 172, 114, 232, 173, 152, 40,  15,  10,  144, 35,  120, 102, 161, 141, 121, 191, 167,
      69,  49,  69,  18,  105, 98,  56,  82,  78,  28,  150, 122, 223, 125, 38,  72,  225, 248, 124, 205, 12,  74,  18,
      157, 5,   249, 179, 137, 228, 92,  50,  6,   27,  9,   207, 155, 135, 36,  3,   170, 54,  107, 147, 225, 92,  228,
      234, 206, 22,  31,  28,  112, 167, 209, 46,  75,  10,  111, 113, 230, 27,  169, 225, 35,  82,  117, 111, 2,   153,
      96,  33,  243, 118, 174, 168, 164, 161, 137, 161, 23,  13,  53,  51,  240, 236, 185, 16,  62,  175, 63,  80,  97,
      6,   221, 97,  103, 92,  216, 85,  225, 154, 27,  141, 146, 184, 199, 132, 216, 165, 108, 139, 49,  190, 164, 196,
      195, 53,  219, 239, 87,  101, 183, 48,  98,  222, 66,  99,  172, 191, 189, 189, 174, 131, 209, 108, 185, 141, 212,
      124, 169, 117, 131, 155, 107, 122, 212, 95,  9,   246, 202, 13,  188, 25,  35,  20,  138, 155, 7,   18,  33,  251,
      49,  142, 157, 215, 125, 20,  183, 8,   252, 122, 247, 11,  37,  140, 60,  12,  45,  192, 21,  176, 116, 130, 96,
      64,  97,  108, 214, 58,  129, 227, 1,   94,  4,   252, 138, 100, 240, 52,  178, 12,  148, 160, 143, 84,  165, 21,
      112, 249, 173, 171, 83,  218, 72,  126, 157, 45,  78,  150, 65,  165, 107, 158, 11,  165, 136, 20,  37,  209, 141,
      138, 108, 220, 69,  177, 107, 194, 130, 135, 226, 106, 46,  24,  88,  47,  67,  37,  241, 73,  129, 223, 129, 218,
      127, 156, 145, 113, 53,  226, 173, 84,  230, 82,  166, 244, 12,  219, 12,  203, 118, 10,  170, 252, 179, 144, 217,
      185, 130, 149, 22,  58,  38,  142, 246, 77,  186, 214, 121, 129, 120, 125, 192, 205, 231, 165, 1,   3,   246, 53,
      221, 119, 140, 189, 94,  114, 75,  116, 76,  45,  29,  93,  237, 143, 234, 225, 222, 67,  37,  98,  37,  144, 222,
      49,  215, 156, 56,  185, 109, 75,  143, 36,  165, 220, 142, 19,  127, 232, 84,  235, 202, 56,  184, 204, 48,  155,
      75,  183, 74,  75,  55,  77,  246, 21,  202, 184, 248, 84,  89,  47,  213, 194, 167, 144, 184, 108, 60,  78,  12,
      221, 30,  169, 162, 247, 1,   96,  225, 73,  6,   143, 192, 134, 162, 231, 174, 172, 145, 199, 45,  135, 117, 70,
      218, 226, 94,  43,  215, 130, 139, 48,  231, 191, 142, 189, 140, 185, 194, 41,  230, 160, 105, 211, 130, 141, 249,
      88,  240, 38,  13,  12,  152, 248, 143, 250, 120, 215, 176, 246, 236, 131, 187, 172, 136, 95,  143, 154, 59,  111,
      150, 35,  82,  33,  11,  126, 92,  205, 91,  249, 125, 7,   112, 220, 189, 234, 66,  58,  161, 149, 7,   38,  101,
      109, 249, 212, 164, 72,  221, 162, 96,  31,  64,  125, 203, 74,  117, 87,  233, 21,  156, 43,  174, 89,  34,  75,
      217, 164, 145, 84,  201, 105, 178, 155, 54,  73,  102, 39,  31,  138, 164, 23,  167, 250, 239, 44,  47,  181, 11,
      149, 192, 92,  68,  77,  141, 157, 194, 160, 104, 220, 229, 95,  63,  47,  242, 75,  102, 219, 136, 253, 117, 31,
      23,  75,  152, 35,  44,  91,  143, 42,  15,  58,  156, 198, 93,  234, 95,  70,  238, 196, 209, 94,  12,  222, 92,
      177, 87,  205, 222, 17,  67,  94,  109, 145, 156, 155, 40,  50,  188, 145, 221, 174, 61,  117, 57,  100, 151, 59,
      216, 20,  63,  1,   100, 163, 25,  111, 156, 249, 34,  54,  73,  104, 156, 47,  113, 63,  251, 244, 177, 124, 45,
      48,  224, 227, 205, 218, 149, 80,  68,  80,  127, 243, 55,  127, 113, 28,  18,  30,  181, 253, 177, 197, 53,  150,
      103, 195, 219, 178, 126, 167, 156, 4,   240, 69,  34,  89,  213, 200, 239, 133, 164, 42,  46,  165, 47,  121, 209,
      232, 236, 45,  89,  222, 141, 37,  128, 52,  62,  148, 245, 107, 115, 250, 150, 5,   191, 158, 20,  204, 169, 232,
      98,  250, 71,  179, 74,  253, 130, 96,  110, 254, 42,  106, 196, 121, 251, 225, 67,  88,  128, 101, 152, 59,  86,
      241, 200, 76,  202, 2,   26,  166, 211, 92,  63,  39,  18,  250, 116, 0,   61,  238, 71,  218, 20,  118, 125, 144,
      74,  8,   220, 15,  108, 5,   36,  61,  83,  4,   190, 195, 127, 52,  250, 1,   57,  172, 234, 214, 161, 163, 78,
      80,  235, 41,  229, 141, 208, 246, 185, 50,  56,  185, 61,  47,  204, 54,  172, 223, 165, 32,  31,  125, 12,  57,
      11,  20,  148, 141, 92,  107, 13,  76,  89,  59,  182, 40,  120, 21,  104, 202, 210, 61,  114, 239, 150, 58,  74,
      253, 38,  163, 215, 59,  47,  185, 204, 1,   88,  133, 74,  179, 76,  25,  232, 158, 211, 19,  181, 42,  104, 8,
      191, 98,  233, 9,   16,  71,  62,  205, 241, 246, 118, 180, 136, 52,  80,  127, 174, 90,  63,  127, 196, 152, 93,
      207, 243, 163, 27,  55,  17,  131, 142, 230, 83,  235, 227, 31,  151, 126, 24,  48,  0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   56,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   105, 0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   104, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   175, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   47,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   152, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   234, 0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   9,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   47,  0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   60,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   144, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   172, 0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   93,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   227, 0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      47,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   161, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   228, 0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   120, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   176, 0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   60,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   19,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   199, 0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   17,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   22,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   2,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   27,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   243, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   38,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   195, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   110, 0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {30, 33}, {2, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 1, 32, 32}, {30, 33}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape3_uint8) {
  uint8_t data[2 * 32 * 32] = {
      110, 223, 166, 62,  135, 226, 67,  118, 86,  236, 22,  196, 106, 156, 36,  141, 249, 66,  207, 150, 50,  223, 43,
      156, 35,  17,  10,  27,  190, 239, 52,  70,  85,  92,  35,  246, 169, 88,  13,  6,   216, 237, 2,   191, 65,  17,
      37,  28,  195, 39,  65,  148, 155, 192, 230, 243, 98,  249, 94,  192, 211, 65,  164, 217, 48,  18,  121, 246, 29,
      63,  196, 155, 208, 28,  79,  207, 111, 148, 44,  180, 233, 12,  157, 211, 227, 6,   59,  103, 0,   9,   164, 65,
      9,   53,  93,  70,  2,   26,  75,  96,  144, 37,  43,  140, 168, 160, 68,  202, 9,   84,  212, 231, 52,  218, 140,
      185, 87,  17,  118, 30,  123, 35,  113, 207, 126, 25,  231, 168, 18,  200, 209, 40,  89,  174, 148, 117, 250, 126,
      45,  240, 5,   187, 70,  142, 32,  49,  30,  88,  67,  154, 63,  100, 62,  120, 115, 132, 189, 69,  177, 79,  147,
      226, 22,  244, 1,   166, 232, 3,   7,   198, 25,  183, 64,  59,  145, 126, 23,  7,   169, 195, 10,  50,  150, 196,
      238, 141, 187, 169, 169, 80,  226, 225, 166, 72,  208, 16,  149, 38,  137, 213, 159, 104, 48,  203, 213, 56,  127,
      26,  182, 242, 111, 31,  140, 117, 251, 59,  84,  42,  205, 204, 79,  235, 196, 245, 74,  148, 91,  26,  182, 240,
      100, 78,  171, 14,  221, 88,  186, 246, 107, 200, 91,  70,  204, 135, 213, 226, 115, 33,  128, 76,  106, 232, 76,
      98,  56,  232, 19,  172, 243, 11,  47,  192, 160, 232, 23,  78,  19,  75,  169, 243, 25,  4,   72,  140, 36,  1,
      44,  31,  232, 247, 15,  79,  140, 103, 181, 140, 24,  117, 155, 96,  151, 112, 17,  209, 204, 139, 223, 89,  122,
      149, 41,  41,  201, 4,   206, 171, 172, 207, 185, 156, 140, 204, 45,  124, 8,   45,  176, 66,  135, 232, 29,  17,
      220, 160, 246, 97,  110, 200, 201, 103, 155, 195, 73,  183, 235, 67,  211, 214, 23,  196, 217, 57,  57,  27,  106,
      100, 90,  190, 155, 38,  143, 164, 12,  140, 30,  36,  175, 229, 177, 121, 164, 92,  181, 221, 26,  239, 184, 229,
      233, 32,  139, 120, 12,  206, 72,  227, 223, 161, 12,  211, 188, 10,  69,  190, 23,  247, 215, 65,  228, 246, 77,
      20,  205, 17,  220, 198, 79,  44,  167, 88,  43,  77,  155, 111, 135, 52,  102, 178, 92,  197, 151, 167, 38,  44,
      246, 84,  140, 126, 192, 12,  215, 172, 233, 98,  52,  189, 30,  222, 98,  195, 149, 83,  160, 227, 26,  37,  207,
      129, 31,  235, 146, 184, 101, 152, 34,  32,  109, 130, 142, 113, 148, 73,  125, 190, 201, 9,   50,  48,  93,  71,
      180, 16,  107, 22,  160, 111, 213, 235, 124, 231, 140, 226, 135, 107, 245, 45,  130, 126, 241, 46,  226, 154, 238,
      241, 148, 10,  192, 60,  110, 89,  31,  194, 221, 217, 118, 242, 243, 220, 76,  201, 164, 29,  6,   26,  162, 133,
      204, 252, 149, 12,  104, 181, 172, 226, 131, 207, 144, 236, 230, 154, 240, 189, 204, 196, 204, 0,   101, 102, 68,
      95,  56,  72,  51,  12,  170, 154, 76,  153, 209, 219, 68,  111, 64,  82,  56,  205, 204, 218, 150, 102, 197, 157,
      103, 133, 35,  186, 36,  144, 74,  150, 74,  110, 178, 143, 137, 45,  169, 106, 114, 250, 67,  217, 248, 46,  244,
      249, 50,  158, 138, 183, 220, 91,  193, 229, 159, 22,  206, 94,  10,  63,  128, 211, 162, 28,  40,  100, 8,   121,
      178, 78,  247, 244, 98,  14,  165, 28,  65,  26,  65,  185, 233, 51,  153, 165, 205, 12,  116, 97,  88,  157, 153,
      23,  160, 141, 162, 119, 10,  86,  122, 21,  240, 141, 100, 248, 87,  190, 170, 204, 162, 68,  216, 196, 129, 254,
      164, 157, 123, 51,  6,   27,  76,  22,  106, 82,  209, 83,  164, 8,   76,  219, 107, 252, 119, 49,  106, 213, 218,
      155, 250, 68,  132, 157, 193, 135, 15,  173, 90,  134, 131, 67,  45,  76,  178, 116, 50,  53,  84,  183, 46,  50,
      123, 92,  167, 230, 223, 55,  208, 228, 165, 247, 254, 177, 21,  187, 192, 75,  182, 209, 243, 11,  0,   189, 72,
      82,  24,  165, 223, 143, 131, 133, 120, 211, 75,  152, 185, 55,  70,  52,  44,  109, 72,  235, 140, 88,  189, 205,
      44,  81,  44,  172, 22,  115, 114, 187, 100, 157, 198, 182, 77,  123, 13,  2,   201, 152, 64,  157, 186, 31,  21,
      17,  242, 30,  116, 178, 88,  140, 232, 36,  133, 123, 86,  58,  181, 34,  126, 241, 67,  147, 95,  151, 245, 9,
      142, 16,  58,  20,  6,   223, 211, 43,  96,  251, 188, 193, 164, 229, 29,  242, 109, 46,  195, 7,   14,  37,  222,
      38,  135, 157, 39,  5,   146, 158, 198, 230, 32,  2,   115, 200, 151, 31,  20,  239, 150, 50,  201, 211, 217, 64,
      106, 232, 109, 101, 102, 32,  0,   153, 92,  233, 50,  243, 78,  12,  155, 16,  45,  34,  127, 138, 41,  249, 11,
      117, 230, 239, 63,  230, 134, 173, 229, 32,  176, 61,  165, 244, 41,  139, 107, 34,  43,  48,  114, 4,   237, 154,
      215, 140, 71,  234, 4,   25,  192, 31,  238, 139, 58,  123, 207, 150, 94,  121, 116, 49,  87,  25,  242, 224, 95,
      205, 189, 205, 9,   20,  51,  25,  175, 73,  91,  139, 117, 86,  75,  52,  106, 201, 10,  70,  93,  124, 203, 107,
      223, 2,   184, 147, 223, 9,   29,  11,  211, 170, 247, 72,  17,  4,   67,  74,  251, 103, 190, 20,  88,  206, 91,
      153, 202, 42,  47,  94,  186, 8,   22,  119, 241, 72,  203, 180, 79,  186, 181, 78,  218, 157, 173, 138, 156, 33,
      149, 175, 246, 179, 166, 117, 108, 148, 147, 181, 67,  11,  163, 99,  248, 161, 31,  195, 49,  122, 35,  214, 65,
      81,  41,  150, 180, 134, 185, 212, 242, 123, 231, 227, 129, 211, 80,  248, 154, 243, 219, 89,  57,  197, 167, 245,
      177, 38,  112, 178, 214, 111, 244, 218, 149, 240, 49,  243, 14,  70,  150, 74,  4,   223, 188, 214, 112, 23,  101,
      176, 118, 207, 106, 156, 240, 62,  19,  206, 120, 181, 145, 239, 229, 166, 189, 35,  168, 145, 144, 106, 189, 87,
      163, 147, 91,  228, 111, 180, 90,  199, 64,  164, 36,  8,   165, 118, 209, 245, 39,  214, 168, 15,  20,  110, 95,
      89,  37,  71,  52,  107, 228, 229, 240, 207, 47,  169, 146, 46,  49,  130, 11,  47,  0,   190, 230, 205, 80,  13,
      209, 238, 146, 131, 187, 175, 27,  41,  249, 252, 148, 178, 23,  207, 124, 219, 7,   156, 31,  105, 116, 19,  140,
      63,  66,  5,   131, 157, 213, 9,   137, 39,  68,  89,  94,  28,  101, 229, 26,  103, 138, 186, 38,  251, 207, 136,
      132, 182, 105, 114, 31,  6,   41,  22,  37,  124, 184, 51,  67,  245, 77,  229, 136, 241, 167, 7,   53,  20,  63,
      246, 35,  97,  80,  150, 79,  51,  252, 89,  1,   29,  228, 130, 123, 32,  5,   51,  252, 105, 46,  236, 16,  209,
      246, 238, 169, 79,  87,  223, 209, 93,  105, 193, 35,  152, 14,  46,  192, 201, 117, 247, 142, 157, 84,  191, 9,
      165, 209, 72,  226, 213, 42,  159, 133, 56,  151, 196, 89,  35,  159, 254, 98,  55,  155, 92,  216, 186, 65,  226,
      98,  121, 58,  157, 167, 112, 201, 194, 32,  139, 164, 119, 225, 246, 51,  68,  187, 40,  39,  162, 248, 107, 254,
      48,  66,  112, 112, 3,   43,  231, 251, 219, 26,  12,  118, 116, 89,  135, 139, 20,  142, 89,  46,  168, 96,  109,
      212, 216, 243, 221, 34,  154, 243, 119, 158, 170, 246, 59,  28,  137, 213, 173, 16,  51,  194, 62,  163, 82,  89,
      11,  54,  164, 146, 92,  42,  61,  110, 97,  116, 8,   117, 193, 140, 30,  99,  50,  174, 115, 72,  102, 96,  153,
      57,  16,  34,  100, 128, 190, 59,  19,  252, 223, 252, 222, 5,   70,  58,  40,  63,  131, 250, 76,  77,  210, 207,
      248, 127, 55,  22,  22,  176, 185, 110, 246, 199, 32,  73,  137, 58,  177, 193, 236, 169, 22,  117, 240, 58,  206,
      115, 23,  51,  243, 188, 139, 32,  219, 233, 162, 246, 242, 209, 197, 210, 78,  235, 31,  190, 61,  115, 218, 243,
      213, 90,  98,  241, 200, 232, 198, 225, 112, 106, 104, 250, 198, 21,  142, 71,  135, 113, 43,  19,  239, 96,  179,
      136, 91,  176, 202, 238, 251, 75,  8,   112, 50,  235, 184, 192, 131, 133, 125, 102, 122, 17,  215, 146, 20,  127,
      130, 207, 149, 21,  47,  240, 9,   151, 131, 41,  37,  201, 36,  99,  202, 108, 195, 162, 252, 240, 172, 66,  243,
      11,  91,  237, 23,  237, 187, 2,   253, 85,  169, 239, 239, 128, 79,  201, 220, 187, 148, 87,  100, 17,  107, 158,
      164, 162, 99,  6,   138, 176, 138, 78,  10,  161, 209, 163, 231, 0,   57,  59,  109, 110, 80,  102, 220, 97,  38,
      10,  3,   119, 172, 72,  180, 125, 48,  63,  78,  127, 252, 80,  18,  205, 106, 230, 85,  27,  235, 116, 211, 7,
      156, 117, 42,  212, 217, 0,   115, 214, 146, 37,  240, 143, 235, 251, 201, 109, 106, 213, 148, 238, 123, 101, 141,
      94,  215, 69,  3,   29,  228, 98,  210, 191, 218, 148, 137, 231, 224, 130, 213, 23,  59,  183, 217, 47,  176, 229,
      210, 118, 209, 175, 166, 250, 207, 156, 60,  161, 169, 63,  179, 214, 231, 97,  144, 28,  115, 212, 106, 206, 244,
      12,  165, 29,  167, 89,  243, 214, 249, 113, 250, 229, 121, 210, 94,  29,  229, 81,  158, 148, 139, 34,  187, 138,
      65,  250, 254, 183, 155, 216, 152, 184, 122, 242, 149, 28,  171, 248, 210, 142, 78,  101, 246, 22,  253, 129, 138,
      225, 179, 234, 188, 15,  50,  145, 87,  192, 223, 46,  245, 87,  10,  0,   39,  207, 41,  62,  213, 233, 10,  45,
      185, 138, 67,  11,  16,  7,   150, 194, 233, 131, 110, 237, 130, 190, 139, 195, 252, 41,  157, 196, 192, 163, 182,
      181, 202, 121, 189, 162, 48,  33,  69,  3,   66,  209, 42,  139, 9,   85,  136, 163, 183, 218, 12,  22,  20,  139,
      26,  33,  245, 179, 199, 120, 76,  239, 206, 181, 117, 231, 173, 216, 96,  98,  253, 250, 171, 31,  214, 228, 14,
      159, 39,  37,  153, 87,  183, 213, 18,  71,  147, 128, 150, 63,  85,  92,  225, 55,  5,   167, 39,  69,  178, 131,
      73,  38,  146, 175, 154, 58,  57,  98,  145, 219, 79,  145, 27,  143, 237, 155, 56,  239, 83,  114, 125, 58,  175,
      187, 35,  109, 36,  160, 85,  251, 192, 94,  194, 83,  22,  42,  104, 93,  103, 32,  217, 110, 131, 227, 142, 199,
      83,  59,  10,  104, 54,  41,  138, 47,  100, 6,   152, 59,  103, 98,  149, 29,  233, 125, 119, 131, 210, 64,  133,
      249, 34,  157, 132, 69,  200, 20,  45,  235, 126, 43,  195, 180, 67,  95,  75,  43,  247, 152, 84,  212, 86,  151,
      159, 167, 197, 107, 175, 230, 14,  99,  252, 54,  138, 74,  152, 75,  245, 88,  99,  114, 32,  146, 187, 156, 39,
      18,  68,  7,   184, 215, 115, 245, 129, 154, 73,  59,  194, 245, 96,  181, 49,  11,  4,   103, 185, 246, 152, 29,
      213, 9,   162, 23,  44,  89,  119, 214, 216, 139, 223, 188, 5,   165, 72,  183, 41,  231, 253, 29,  66,  102, 243,
      44,  92,  122, 32,  164, 63,  128, 38,  178, 162, 21,  164, 9,   29,  153, 244, 199, 192, 206, 249, 115, 142, 118,
      169, 186, 239, 34,  171, 211, 74,  92,  103, 167, 110, 66,  221, 67,  74,  189, 23,  236, 189, 120, 249, 87,  99,
      194, 247, 133, 211, 69,  49,  15,  27,  133, 233, 181, 15,  112, 181, 200, 149, 229, 103, 93,  254, 253, 182, 74,
      35,  171, 114, 50,  230, 106, 138, 170, 4,   95,  23,  53,  181, 87,  90,  85,  18,  98,  233, 194, 16,  18,  83,
      81,  234, 4,   42,  99,  225, 166, 46,  51,  71,  227, 170, 176, 51,  37,  12,  26,  198, 216, 247, 10,  150, 230,
      15,
  };
  uint8_t ret[2 * 1 * 1 * 32 * 32] = {
      110, 223, 166, 62,  135, 226, 67,  118, 86,  236, 22,  196, 106, 156, 36,  141, 249, 66,  207, 150, 50,  223, 43,
      156, 35,  17,  10,  27,  190, 239, 52,  70,  85,  92,  35,  246, 169, 88,  13,  6,   216, 237, 2,   191, 65,  17,
      37,  28,  195, 39,  65,  148, 155, 192, 230, 243, 98,  249, 94,  192, 211, 65,  164, 217, 48,  18,  121, 246, 29,
      63,  196, 155, 208, 28,  79,  207, 111, 148, 44,  180, 233, 12,  157, 211, 227, 6,   59,  103, 0,   9,   164, 65,
      9,   53,  93,  70,  2,   26,  75,  96,  144, 37,  43,  140, 168, 160, 68,  202, 9,   84,  212, 231, 52,  218, 140,
      185, 87,  17,  118, 30,  123, 35,  113, 207, 126, 25,  231, 168, 18,  200, 209, 40,  89,  174, 148, 117, 250, 126,
      45,  240, 5,   187, 70,  142, 32,  49,  30,  88,  67,  154, 63,  100, 62,  120, 115, 132, 189, 69,  177, 79,  147,
      226, 22,  244, 1,   166, 232, 3,   7,   198, 25,  183, 64,  59,  145, 126, 23,  7,   169, 195, 10,  50,  150, 196,
      238, 141, 187, 169, 169, 80,  226, 225, 166, 72,  208, 16,  149, 38,  137, 213, 159, 104, 48,  203, 213, 56,  127,
      26,  182, 242, 111, 31,  140, 117, 251, 59,  84,  42,  205, 204, 79,  235, 196, 245, 74,  148, 91,  26,  182, 240,
      100, 78,  171, 14,  221, 88,  186, 246, 107, 200, 91,  70,  204, 135, 213, 226, 115, 33,  128, 76,  106, 232, 76,
      98,  56,  232, 19,  172, 243, 11,  47,  192, 160, 232, 23,  78,  19,  75,  169, 243, 25,  4,   72,  140, 36,  1,
      44,  31,  232, 247, 15,  79,  140, 103, 181, 140, 24,  117, 155, 96,  151, 112, 17,  209, 204, 139, 223, 89,  122,
      149, 41,  41,  201, 4,   206, 171, 172, 207, 185, 156, 140, 204, 45,  124, 8,   45,  176, 66,  135, 232, 29,  17,
      220, 160, 246, 97,  110, 200, 201, 103, 155, 195, 73,  183, 235, 67,  211, 214, 23,  196, 217, 57,  57,  27,  106,
      100, 90,  190, 155, 38,  143, 164, 12,  140, 30,  36,  175, 229, 177, 121, 164, 92,  181, 221, 26,  239, 184, 229,
      233, 32,  139, 120, 12,  206, 72,  227, 223, 161, 12,  211, 188, 10,  69,  190, 23,  247, 215, 65,  228, 246, 77,
      20,  205, 17,  220, 198, 79,  44,  167, 88,  43,  77,  155, 111, 135, 52,  102, 178, 92,  197, 151, 167, 38,  44,
      246, 84,  140, 126, 192, 12,  215, 172, 233, 98,  52,  189, 30,  222, 98,  195, 149, 83,  160, 227, 26,  37,  207,
      129, 31,  235, 146, 184, 101, 152, 34,  32,  109, 130, 142, 113, 148, 73,  125, 190, 201, 9,   50,  48,  93,  71,
      180, 16,  107, 22,  160, 111, 213, 235, 124, 231, 140, 226, 135, 107, 245, 45,  130, 126, 241, 46,  226, 154, 238,
      241, 148, 10,  192, 60,  110, 89,  31,  194, 221, 217, 118, 242, 243, 220, 76,  201, 164, 29,  6,   26,  162, 133,
      204, 252, 149, 12,  104, 181, 172, 226, 131, 207, 144, 236, 230, 154, 240, 189, 204, 196, 204, 0,   101, 102, 68,
      95,  56,  72,  51,  12,  170, 154, 76,  153, 209, 219, 68,  111, 64,  82,  56,  205, 204, 218, 150, 102, 197, 157,
      103, 133, 35,  186, 36,  144, 74,  150, 74,  110, 178, 143, 137, 45,  169, 106, 114, 250, 67,  217, 248, 46,  244,
      249, 50,  158, 138, 183, 220, 91,  193, 229, 159, 22,  206, 94,  10,  63,  128, 211, 162, 28,  40,  100, 8,   121,
      178, 78,  247, 244, 98,  14,  165, 28,  65,  26,  65,  185, 233, 51,  153, 165, 205, 12,  116, 97,  88,  157, 153,
      23,  160, 141, 162, 119, 10,  86,  122, 21,  240, 141, 100, 248, 87,  190, 170, 204, 162, 68,  216, 196, 129, 254,
      164, 157, 123, 51,  6,   27,  76,  22,  106, 82,  209, 83,  164, 8,   76,  219, 107, 252, 119, 49,  106, 213, 218,
      155, 250, 68,  132, 157, 193, 135, 15,  173, 90,  134, 131, 67,  45,  76,  178, 116, 50,  53,  84,  183, 46,  50,
      123, 92,  167, 230, 223, 55,  208, 228, 165, 247, 254, 177, 21,  187, 192, 75,  182, 209, 243, 11,  0,   189, 72,
      82,  24,  165, 223, 143, 131, 133, 120, 211, 75,  152, 185, 55,  70,  52,  44,  109, 72,  235, 140, 88,  189, 205,
      44,  81,  44,  172, 22,  115, 114, 187, 100, 157, 198, 182, 77,  123, 13,  2,   201, 152, 64,  157, 186, 31,  21,
      17,  242, 30,  116, 178, 88,  140, 232, 36,  133, 123, 86,  58,  181, 34,  126, 241, 67,  147, 95,  151, 245, 9,
      142, 16,  58,  20,  6,   223, 211, 43,  96,  251, 188, 193, 164, 229, 29,  242, 109, 46,  195, 7,   14,  37,  222,
      38,  135, 157, 39,  5,   146, 158, 198, 230, 32,  2,   115, 200, 151, 31,  20,  239, 150, 50,  201, 211, 217, 64,
      106, 232, 109, 101, 102, 32,  0,   153, 92,  233, 50,  243, 78,  12,  155, 16,  45,  34,  127, 138, 41,  249, 11,
      117, 230, 239, 63,  230, 134, 173, 229, 32,  176, 61,  165, 244, 41,  139, 107, 34,  43,  48,  114, 4,   237, 154,
      215, 140, 71,  234, 4,   25,  192, 31,  238, 139, 58,  123, 207, 150, 94,  121, 116, 49,  87,  25,  242, 224, 95,
      205, 189, 205, 9,   20,  51,  25,  175, 73,  91,  139, 117, 86,  75,  52,  106, 201, 10,  70,  93,  124, 203, 107,
      223, 2,   184, 147, 223, 9,   29,  11,  211, 170, 247, 72,  17,  4,   67,  74,  251, 103, 190, 20,  88,  206, 91,
      153, 202, 42,  47,  94,  186, 8,   22,  119, 241, 72,  203, 180, 79,  186, 181, 78,  218, 157, 173, 138, 156, 33,
      149, 175, 246, 179, 166, 117, 108, 148, 147, 181, 67,  11,  163, 99,  248, 161, 31,  195, 49,  122, 35,  214, 65,
      81,  41,  150, 180, 134, 185, 212, 242, 123, 231, 227, 129, 211, 80,  248, 154, 243, 219, 89,  57,  197, 167, 245,
      177, 38,  112, 178, 214, 111, 244, 218, 149, 240, 49,  243, 14,  70,  150, 74,  4,   223, 188, 214, 112, 23,  101,
      176, 118, 207, 106, 156, 240, 62,  19,  206, 120, 181, 145, 239, 229, 166, 189, 35,  168, 145, 144, 106, 189, 87,
      163, 147, 91,  228, 111, 180, 90,  199, 64,  164, 36,  8,   165, 118, 209, 245, 39,  214, 168, 15,  20,  110, 95,
      89,  37,  71,  52,  107, 228, 229, 240, 207, 47,  169, 146, 46,  49,  130, 11,  47,  0,   190, 230, 205, 80,  13,
      209, 238, 146, 131, 187, 175, 27,  41,  249, 252, 148, 178, 23,  207, 124, 219, 7,   156, 31,  105, 116, 19,  140,
      63,  66,  5,   131, 157, 213, 9,   137, 39,  68,  89,  94,  28,  101, 229, 26,  103, 138, 186, 38,  251, 207, 136,
      132, 182, 105, 114, 31,  6,   41,  22,  37,  124, 184, 51,  67,  245, 77,  229, 136, 241, 167, 7,   53,  20,  63,
      246, 35,  97,  80,  150, 79,  51,  252, 89,  1,   29,  228, 130, 123, 32,  5,   51,  252, 105, 46,  236, 16,  209,
      246, 238, 169, 79,  87,  223, 209, 93,  105, 193, 35,  152, 14,  46,  192, 201, 117, 247, 142, 157, 84,  191, 9,
      165, 209, 72,  226, 213, 42,  159, 133, 56,  151, 196, 89,  35,  159, 254, 98,  55,  155, 92,  216, 186, 65,  226,
      98,  121, 58,  157, 167, 112, 201, 194, 32,  139, 164, 119, 225, 246, 51,  68,  187, 40,  39,  162, 248, 107, 254,
      48,  66,  112, 112, 3,   43,  231, 251, 219, 26,  12,  118, 116, 89,  135, 139, 20,  142, 89,  46,  168, 96,  109,
      212, 216, 243, 221, 34,  154, 243, 119, 158, 170, 246, 59,  28,  137, 213, 173, 16,  51,  194, 62,  163, 82,  89,
      11,  54,  164, 146, 92,  42,  61,  110, 97,  116, 8,   117, 193, 140, 30,  99,  50,  174, 115, 72,  102, 96,  153,
      57,  16,  34,  100, 128, 190, 59,  19,  252, 223, 252, 222, 5,   70,  58,  40,  63,  131, 250, 76,  77,  210, 207,
      248, 127, 55,  22,  22,  176, 185, 110, 246, 199, 32,  73,  137, 58,  177, 193, 236, 169, 22,  117, 240, 58,  206,
      115, 23,  51,  243, 188, 139, 32,  219, 233, 162, 246, 242, 209, 197, 210, 78,  235, 31,  190, 61,  115, 218, 243,
      213, 90,  98,  241, 200, 232, 198, 225, 112, 106, 104, 250, 198, 21,  142, 71,  135, 113, 43,  19,  239, 96,  179,
      136, 91,  176, 202, 238, 251, 75,  8,   112, 50,  235, 184, 192, 131, 133, 125, 102, 122, 17,  215, 146, 20,  127,
      130, 207, 149, 21,  47,  240, 9,   151, 131, 41,  37,  201, 36,  99,  202, 108, 195, 162, 252, 240, 172, 66,  243,
      11,  91,  237, 23,  237, 187, 2,   253, 85,  169, 239, 239, 128, 79,  201, 220, 187, 148, 87,  100, 17,  107, 158,
      164, 162, 99,  6,   138, 176, 138, 78,  10,  161, 209, 163, 231, 0,   57,  59,  109, 110, 80,  102, 220, 97,  38,
      10,  3,   119, 172, 72,  180, 125, 48,  63,  78,  127, 252, 80,  18,  205, 106, 230, 85,  27,  235, 116, 211, 7,
      156, 117, 42,  212, 217, 0,   115, 214, 146, 37,  240, 143, 235, 251, 201, 109, 106, 213, 148, 238, 123, 101, 141,
      94,  215, 69,  3,   29,  228, 98,  210, 191, 218, 148, 137, 231, 224, 130, 213, 23,  59,  183, 217, 47,  176, 229,
      210, 118, 209, 175, 166, 250, 207, 156, 60,  161, 169, 63,  179, 214, 231, 97,  144, 28,  115, 212, 106, 206, 244,
      12,  165, 29,  167, 89,  243, 214, 249, 113, 250, 229, 121, 210, 94,  29,  229, 81,  158, 148, 139, 34,  187, 138,
      65,  250, 254, 183, 155, 216, 152, 184, 122, 242, 149, 28,  171, 248, 210, 142, 78,  101, 246, 22,  253, 129, 138,
      225, 179, 234, 188, 15,  50,  145, 87,  192, 223, 46,  245, 87,  10,  0,   39,  207, 41,  62,  213, 233, 10,  45,
      185, 138, 67,  11,  16,  7,   150, 194, 233, 131, 110, 237, 130, 190, 139, 195, 252, 41,  157, 196, 192, 163, 182,
      181, 202, 121, 189, 162, 48,  33,  69,  3,   66,  209, 42,  139, 9,   85,  136, 163, 183, 218, 12,  22,  20,  139,
      26,  33,  245, 179, 199, 120, 76,  239, 206, 181, 117, 231, 173, 216, 96,  98,  253, 250, 171, 31,  214, 228, 14,
      159, 39,  37,  153, 87,  183, 213, 18,  71,  147, 128, 150, 63,  85,  92,  225, 55,  5,   167, 39,  69,  178, 131,
      73,  38,  146, 175, 154, 58,  57,  98,  145, 219, 79,  145, 27,  143, 237, 155, 56,  239, 83,  114, 125, 58,  175,
      187, 35,  109, 36,  160, 85,  251, 192, 94,  194, 83,  22,  42,  104, 93,  103, 32,  217, 110, 131, 227, 142, 199,
      83,  59,  10,  104, 54,  41,  138, 47,  100, 6,   152, 59,  103, 98,  149, 29,  233, 125, 119, 131, 210, 64,  133,
      249, 34,  157, 132, 69,  200, 20,  45,  235, 126, 43,  195, 180, 67,  95,  75,  43,  247, 152, 84,  212, 86,  151,
      159, 167, 197, 107, 175, 230, 14,  99,  252, 54,  138, 74,  152, 75,  245, 88,  99,  114, 32,  146, 187, 156, 39,
      18,  68,  7,   184, 215, 115, 245, 129, 154, 73,  59,  194, 245, 96,  181, 49,  11,  4,   103, 185, 246, 152, 29,
      213, 9,   162, 23,  44,  89,  119, 214, 216, 139, 223, 188, 5,   165, 72,  183, 41,  231, 253, 29,  66,  102, 243,
      44,  92,  122, 32,  164, 63,  128, 38,  178, 162, 21,  164, 9,   29,  153, 244, 199, 192, 206, 249, 115, 142, 118,
      169, 186, 239, 34,  171, 211, 74,  92,  103, 167, 110, 66,  221, 67,  74,  189, 23,  236, 189, 120, 249, 87,  99,
      194, 247, 133, 211, 69,  49,  15,  27,  133, 233, 181, 15,  112, 181, 200, 149, 229, 103, 93,  254, 253, 182, 74,
      35,  171, 114, 50,  230, 106, 138, 170, 4,   95,  23,  53,  181, 87,  90,  85,  18,  98,  233, 194, 16,  18,  83,
      81,  234, 4,   42,  99,  225, 166, 46,  51,  71,  227, 170, 176, 51,  37,  12,  26,  198, 216, 247, 10,  150, 230,
      15,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 32, 32}, {2, 1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 1, 1, 32, 32}, {2, 32, 32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape4_uint8_1) {
  uint8_t data[2 * 3 * 4 * 32] = {
      85,  14,  85,  145, 50,  114, 71,  246, 101, 16,  101, 237, 4,   192, 118, 148, 119, 42,  185, 105, 189, 38,  138,
      149, 123, 8,   222, 30,  153, 182, 13,  117, 143, 112, 111, 234, 72,  115, 6,   141, 169, 86,  57,  254, 200, 31,
      111, 214, 190, 130, 221, 182, 236, 153, 120, 251, 98,  178, 35,  197, 176, 50,  34,  102, 72,  217, 134, 139, 230,
      42,  254, 235, 79,  76,  102, 34,  111, 49,  131, 102, 178, 247, 44,  213, 215, 142, 96,  236, 167, 123, 221, 8,
      22,  5,   93,  6,   84,  5,   198, 222, 67,  210, 229, 72,  220, 149, 74,  173, 71,  20,  171, 42,  92,  236, 234,
      249, 27,  25,  21,  156, 93,  173, 14,  252, 90,  251, 177, 32,  224, 251, 192, 71,  53,  181, 127, 66,  104, 148,
      221, 27,  82,  233, 102, 107, 138, 182, 181, 159, 136, 71,  97,  40,  22,  133, 112, 159, 229, 252, 34,  122, 115,
      52,  149, 167, 220, 174, 67,  201, 158, 78,  96,  145, 31,  100, 133, 30,  3,   232, 55,  230, 175, 211, 117, 100,
      12,  182, 104, 156, 29,  119, 227, 25,  159, 50,  136, 181, 43,  96,  138, 130, 58,  31,  127, 231, 163, 121, 46,
      42,  133, 238, 69,  19,  81,  147, 87,  28,  84,  57,  140, 37,  3,   15,  114, 34,  119, 215, 77,  71,  178, 127,
      130, 146, 179, 193, 248, 51,  174, 51,  199, 211, 35,  98,  75,  100, 55,  86,  171, 167, 188, 201, 118, 140, 159,
      236, 137, 180, 240, 41,  61,  227, 80,  240, 26,  194, 163, 10,  18,  167, 79,  9,   36,  70,  46,  233, 167, 187,
      23,  204, 45,  184, 60,  143, 149, 181, 186, 229, 147, 249, 83,  36,  94,  161, 96,  177, 209, 210, 194, 30,  103,
      94,  232, 215, 156, 35,  220, 252, 128, 85,  161, 115, 209, 254, 11,  229, 69,  68,  16,  173, 115, 51,  188, 84,
      197, 166, 46,  228, 248, 91,  131, 201, 180, 242, 112, 145, 118, 216, 59,  56,  76,  166, 144, 118, 147, 190, 79,
      249, 138, 39,  172, 224, 104, 15,  147, 203, 194, 160, 114, 212, 85,  57,  118, 163, 146, 235, 22,  113, 225, 74,
      47,  227, 151, 187, 3,   104, 222, 52,  63,  176, 183, 228, 48,  57,  210, 240, 244, 33,  140, 109, 150, 236, 111,
      6,   122, 34,  198, 143, 41,  160, 114, 87,  19,  100, 67,  105, 17,  23,  207, 207, 165, 154, 197, 195, 216, 122,
      85,  71,  188, 136, 22,  221, 120, 105, 250, 197, 244, 25,  31,  235, 26,  82,  20,  2,   161, 190, 145, 105, 181,
      93,  220, 189, 123, 28,  125, 146, 40,  136, 233, 195, 243, 90,  188, 166, 191, 143, 81,  162, 172, 155, 171, 81,
      193, 146, 241, 54,  43,  27,  123, 252, 118, 186, 206, 189, 137, 190, 27,  108, 191, 224, 165, 176, 35,  84,  180,
      239, 1,   154, 90,  88,  119, 188, 14,  206, 130, 201, 48,  162, 22,  47,  154, 178, 69,  23,  16,  125, 41,  205,
      154, 150, 69,  38,  232, 246, 92,  24,  110, 154, 116, 44,  172, 151, 12,  212, 237, 167, 72,  212, 34,  152, 70,
      137, 18,  63,  107, 49,  62,  47,  55,  73,  23,  94,  82,  198, 25,  15,  205, 206, 55,  193, 27,  105, 182, 226,
      43,  114, 78,  239, 88,  140, 59,  174, 235, 234, 87,  164, 243, 119, 165, 0,   135, 34,  87,  134, 174, 36,  11,
      178, 6,   32,  77,  35,  148, 136, 111, 224, 184, 68,  222, 77,  148, 224, 180, 111, 226, 153, 137, 137, 68,  107,
      242, 178, 165, 75,  29,  58,  180, 55,  68,  149, 97,  179, 170, 65,  214, 104, 212, 186, 175, 231, 205, 157, 108,
      127, 17,  233, 201, 208, 25,  136, 254, 21,  155, 199, 155, 80,  25,  94,  63,  207, 225, 54,  91,  154, 122, 193,
      97,  235, 18,  122, 97,  189, 4,   149, 229, 239, 33,  52,  187, 7,   82,  229, 93,  184, 150, 218, 48,  150, 196,
      152, 3,   233, 183, 182, 25,  178, 0,   236, 49,  20,  189, 6,   173, 95,  227, 105, 161, 27,  250, 121, 14,  135,
      103, 229, 188, 81,  9,   234, 88,  37,  52,  59,  84,  117, 204, 242, 225, 34,  2,   104, 66,  141, 109, 151, 47,
      124, 247, 79,  70,  104, 63,  13,  198, 242, 110, 131, 247, 20,  246, 65,  238, 119, 86,  42,  21,  43,  175, 45,
      231, 78,  143, 118, 8,   100, 133, 27,  59,  188, 61,  105, 165, 183, 81,  96,  26,  106, 153, 151, 186, 232, 54,
      231, 35,  95,  172, 56,  208, 126, 198, 239,
  };
  uint8_t ret[2 * 3 * 1 * 1 * 32 * 32] = {
      85,  14,  85,  145, 50,  114, 71,  246, 101, 16,  101, 237, 4,   192, 118, 148, 119, 42,  185, 105, 189, 38,  138,
      149, 123, 8,   222, 30,  153, 182, 13,  117, 143, 112, 111, 234, 72,  115, 6,   141, 169, 86,  57,  254, 200, 31,
      111, 214, 190, 130, 221, 182, 236, 153, 120, 251, 98,  178, 35,  197, 176, 50,  34,  102, 72,  217, 134, 139, 230,
      42,  254, 235, 79,  76,  102, 34,  111, 49,  131, 102, 178, 247, 44,  213, 215, 142, 96,  236, 167, 123, 221, 8,
      22,  5,   93,  6,   84,  5,   198, 222, 67,  210, 229, 72,  220, 149, 74,  173, 71,  20,  171, 42,  92,  236, 234,
      249, 27,  25,  21,  156, 93,  173, 14,  252, 90,  251, 177, 32,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   224, 251, 192, 71,  53,  181, 127, 66,  104, 148, 221,
      27,  82,  233, 102, 107, 138, 182, 181, 159, 136, 71,  97,  40,  22,  133, 112, 159, 229, 252, 34,  122, 115, 52,
      149, 167, 220, 174, 67,  201, 158, 78,  96,  145, 31,  100, 133, 30,  3,   232, 55,  230, 175, 211, 117, 100, 12,
      182, 104, 156, 29,  119, 227, 25,  159, 50,  136, 181, 43,  96,  138, 130, 58,  31,  127, 231, 163, 121, 46,  42,
      133, 238, 69,  19,  81,  147, 87,  28,  84,  57,  140, 37,  3,   15,  114, 34,  119, 215, 77,  71,  178, 127, 130,
      146, 179, 193, 248, 51,  174, 51,  199, 211, 35,  98,  75,  100, 55,  86,  171, 167, 188, 201, 118, 140, 159, 236,
      137, 180, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   240, 41,  61,  227, 80,  240, 26,  194, 163, 10,  18,  167, 79,  9,   36,  70,  46,  233, 167, 187, 23,  204,
      45,  184, 60,  143, 149, 181, 186, 229, 147, 249, 83,  36,  94,  161, 96,  177, 209, 210, 194, 30,  103, 94,  232,
      215, 156, 35,  220, 252, 128, 85,  161, 115, 209, 254, 11,  229, 69,  68,  16,  173, 115, 51,  188, 84,  197, 166,
      46,  228, 248, 91,  131, 201, 180, 242, 112, 145, 118, 216, 59,  56,  76,  166, 144, 118, 147, 190, 79,  249, 138,
      39,  172, 224, 104, 15,  147, 203, 194, 160, 114, 212, 85,  57,  118, 163, 146, 235, 22,  113, 225, 74,  47,  227,
      151, 187, 3,   104, 222, 52,  63,  176, 183, 228, 48,  57,  210, 240, 0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   244, 33,  140, 109, 150, 236, 111, 6,   122, 34,
      198, 143, 41,  160, 114, 87,  19,  100, 67,  105, 17,  23,  207, 207, 165, 154, 197, 195, 216, 122, 85,  71,  188,
      136, 22,  221, 120, 105, 250, 197, 244, 25,  31,  235, 26,  82,  20,  2,   161, 190, 145, 105, 181, 93,  220, 189,
      123, 28,  125, 146, 40,  136, 233, 195, 243, 90,  188, 166, 191, 143, 81,  162, 172, 155, 171, 81,  193, 146, 241,
      54,  43,  27,  123, 252, 118, 186, 206, 189, 137, 190, 27,  108, 191, 224, 165, 176, 35,  84,  180, 239, 1,   154,
      90,  88,  119, 188, 14,  206, 130, 201, 48,  162, 22,  47,  154, 178, 69,  23,  16,  125, 41,  205, 154, 150, 69,
      38,  232, 246, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   92,  24,  110, 154, 116, 44,  172, 151, 12,  212, 237, 167, 72,  212, 34,  152, 70,  137, 18,  63,  107,
      49,  62,  47,  55,  73,  23,  94,  82,  198, 25,  15,  205, 206, 55,  193, 27,  105, 182, 226, 43,  114, 78,  239,
      88,  140, 59,  174, 235, 234, 87,  164, 243, 119, 165, 0,   135, 34,  87,  134, 174, 36,  11,  178, 6,   32,  77,
      35,  148, 136, 111, 224, 184, 68,  222, 77,  148, 224, 180, 111, 226, 153, 137, 137, 68,  107, 242, 178, 165, 75,
      29,  58,  180, 55,  68,  149, 97,  179, 170, 65,  214, 104, 212, 186, 175, 231, 205, 157, 108, 127, 17,  233, 201,
      208, 25,  136, 254, 21,  155, 199, 155, 80,  25,  94,  63,  207, 225, 54,  0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   91,  154, 122, 193, 97,  235, 18,  122, 97,
      189, 4,   149, 229, 239, 33,  52,  187, 7,   82,  229, 93,  184, 150, 218, 48,  150, 196, 152, 3,   233, 183, 182,
      25,  178, 0,   236, 49,  20,  189, 6,   173, 95,  227, 105, 161, 27,  250, 121, 14,  135, 103, 229, 188, 81,  9,
      234, 88,  37,  52,  59,  84,  117, 204, 242, 225, 34,  2,   104, 66,  141, 109, 151, 47,  124, 247, 79,  70,  104,
      63,  13,  198, 242, 110, 131, 247, 20,  246, 65,  238, 119, 86,  42,  21,  43,  175, 45,  231, 78,  143, 118, 8,
      100, 133, 27,  59,  188, 61,  105, 165, 183, 81,  96,  26,  106, 153, 151, 186, 232, 54,  231, 35,  95,  172, 56,
      208, 126, 198, 239, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 3, 4, 32}, {2, 3, 1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 3, 1, 1, 32, 32}, {2, 3, 4, 32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape4_uint8_2) {
  uint8_t data[2 * 3 * 4 * 33] = {
      52,  248, 168, 232, 216, 6,   57,  232, 23,  51,  58,  199, 97,  233, 34,  233, 253, 246, 140, 158, 15,  242, 67,
      94,  7,   87,  198, 238, 158, 196, 171, 112, 217, 115, 221, 218, 208, 169, 161, 197, 234, 74,  98,  234, 121, 4,
      100, 8,   63,  109, 26,  23,  160, 242, 143, 227, 74,  30,  1,   39,  128, 38,  136, 2,   23,  249, 92,  57,  72,
      172, 185, 10,  5,   12,  89,  204, 161, 209, 245, 10,  160, 195, 120, 45,  210, 182, 236, 63,  170, 16,  132, 166,
      217, 183, 24,  40,  239, 122, 76,  26,  3,   102, 209, 149, 246, 178, 31,  78,  18,  40,  79,  201, 238, 145, 33,
      20,  168, 155, 222, 111, 200, 235, 123, 191, 25,  143, 222, 114, 81,  105, 60,  4,   210, 22,  87,  144, 187, 226,
      115, 42,  96,  18,  197, 34,  19,  160, 152, 174, 1,   206, 196, 253, 187, 180, 7,   224, 56,  153, 96,  130, 107,
      102, 143, 114, 48,  59,  249, 241, 134, 212, 174, 231, 147, 25,  166, 184, 74,  162, 138, 179, 121, 8,   56,  214,
      2,   100, 88,  6,   28,  203, 251, 170, 81,  21,  238, 104, 61,  156, 178, 111, 161, 49,  241, 117, 28,  55,  171,
      112, 29,  162, 205, 57,  99,  236, 129, 114, 148, 209, 116, 72,  220, 195, 93,  151, 206, 20,  188, 127, 60,  231,
      62,  181, 119, 145, 120, 53,  145, 45,  61,  56,  20,  4,   197, 141, 133, 198, 59,  98,  46,  225, 221, 159, 16,
      209, 90,  217, 238, 127, 149, 93,  174, 144, 29,  27,  46,  94,  126, 32,  182, 183, 123, 60,  183, 242, 8,   104,
      52,  107, 58,  147, 90,  0,   23,  95,  51,  243, 191, 12,  199, 30,  253, 120, 154, 68,  170, 83,  41,  235, 197,
      234, 171, 57,  161, 254, 19,  44,  37,  180, 35,  157, 101, 92,  99,  182, 225, 74,  231, 162, 96,  197, 167, 91,
      29,  81,  52,  10,  202, 81,  81,  191, 89,  81,  244, 52,  78,  239, 123, 6,   164, 186, 91,  170, 46,  135, 134,
      126, 199, 118, 153, 32,  82,  181, 130, 97,  16,  36,  71,  105, 227, 148, 138, 122, 250, 32,  47,  42,  79,  221,
      25,  181, 231, 99,  42,  143, 174, 182, 93,  2,   78,  171, 7,   219, 132, 57,  75,  74,  240, 73,  74,  27,  184,
      35,  212, 18,  28,  154, 59,  88,  129, 148, 228, 191, 104, 163, 157, 23,  67,  202, 171, 1,   187, 132, 216, 233,
      152, 231, 35,  94,  25,  209, 79,  152, 207, 103, 192, 169, 42,  60,  64,  124, 140, 183, 224, 53,  162, 7,   3,
      162, 9,   232, 156, 216, 180, 34,  155, 202, 88,  44,  91,  190, 221, 38,  95,  62,  131, 1,   74,  238, 174, 200,
      201, 240, 75,  127, 125, 131, 76,  132, 62,  169, 211, 173, 29,  142, 162, 226, 237, 166, 252, 12,  85,  164, 76,
      228, 23,  126, 189, 203, 51,  135, 76,  90,  195, 89,  220, 55,  206, 231, 7,   52,  61,  128, 87,  134, 243, 203,
      46,  5,   243, 241, 228, 17,  58,  75,  143, 228, 13,  151, 205, 194, 62,  50,  124, 223, 59,  178, 201, 181, 27,
      129, 9,   241, 214, 241, 177, 110, 63,  215, 104, 118, 117, 137, 89,  16,  57,  46,  13,  243, 20,  65,  209, 35,
      241, 127, 117, 161, 71,  37,  89,  10,  18,  38,  19,  120, 137, 198, 143, 240, 74,  240, 119, 242, 50,  64,  47,
      111, 226, 49,  141, 215, 219, 212, 113, 119, 98,  168, 185, 174, 172, 89,  86,  245, 26,  46,  120, 155, 12,  209,
      131, 232, 147, 65,  181, 184, 75,  185, 195, 10,  62,  174, 77,  194, 129, 30,  48,  247, 199, 251, 35,  143, 162,
      80,  26,  11,  117, 12,  232, 46,  75,  215, 114, 127, 34,  211, 133, 244, 233, 117, 75,  5,   201, 47,  120, 197,
      250, 223, 104, 4,   36,  5,   248, 12,  62,  48,  249, 91,  116, 145, 57,  213, 121, 104, 191, 33,  158, 12,  138,
      107, 70,  105, 110, 189, 17,  58,  112, 45,  178, 110, 72,  31,  80,  249, 54,  76,  45,  54,  88,  114, 213, 240,
      248, 70,  76,  216, 191, 217, 26,  215, 88,  23,  49,  246, 162, 196, 131, 157, 233, 42,  78,  235, 228, 215, 217,
      77,  70,  29,  236, 125, 148, 124, 139, 205, 177, 118, 13,  162, 93,  44,  62,  155, 86,  190, 219, 230, 13,  193,
      174, 233, 35,  14,  107, 61,  83,  181, 89,  198, 200, 127, 161, 58,  79,  18,  152, 157, 74,  241, 93,  241, 68,
      102, 35,  254, 142, 116, 215, 252, 242, 124, 98,  178, 243, 172, 158, 144, 108, 201, 24,  202, 243, 114, 35,  74,
      0,   70,  78,  28,  46,  52,  213, 195, 159, 42,
  };
  uint8_t ret[2 * 3 * 2 * 1 * 32 * 32] = {
      52,  248, 168, 232, 216, 6,   57,  232, 23,  51,  58,  199, 97,  233, 34,  233, 253, 246, 140, 158, 15,  242, 67,
      94,  7,   87,  198, 238, 158, 196, 171, 112, 115, 221, 218, 208, 169, 161, 197, 234, 74,  98,  234, 121, 4,   100,
      8,   63,  109, 26,  23,  160, 242, 143, 227, 74,  30,  1,   39,  128, 38,  136, 2,   23,  92,  57,  72,  172, 185,
      10,  5,   12,  89,  204, 161, 209, 245, 10,  160, 195, 120, 45,  210, 182, 236, 63,  170, 16,  132, 166, 217, 183,
      24,  40,  239, 122, 26,  3,   102, 209, 149, 246, 178, 31,  78,  18,  40,  79,  201, 238, 145, 33,  20,  168, 155,
      222, 111, 200, 235, 123, 191, 25,  143, 222, 114, 81,  105, 60,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   217, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   249, 0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   76,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   4,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   210, 22,  87,  144, 187, 226, 115, 42,  96,  18,  197, 34,  19,  160, 152, 174, 1,   206, 196, 253, 187, 180,
      7,   224, 56,  153, 96,  130, 107, 102, 143, 114, 59,  249, 241, 134, 212, 174, 231, 147, 25,  166, 184, 74,  162,
      138, 179, 121, 8,   56,  214, 2,   100, 88,  6,   28,  203, 251, 170, 81,  21,  238, 104, 61,  178, 111, 161, 49,
      241, 117, 28,  55,  171, 112, 29,  162, 205, 57,  99,  236, 129, 114, 148, 209, 116, 72,  220, 195, 93,  151, 206,
      20,  188, 127, 60,  231, 181, 119, 145, 120, 53,  145, 45,  61,  56,  20,  4,   197, 141, 133, 198, 59,  98,  46,
      225, 221, 159, 16,  209, 90,  217, 238, 127, 149, 93,  174, 144, 29,  0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   48,  0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   156,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   62,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   27,  0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   46,  94,  126, 32,  182, 183, 123, 60,  183, 242, 8,   104, 52,  107, 58,  147, 90,  0,   23,  95,  51,
      243, 191, 12,  199, 30,  253, 120, 154, 68,  170, 83,  235, 197, 234, 171, 57,  161, 254, 19,  44,  37,  180, 35,
      157, 101, 92,  99,  182, 225, 74,  231, 162, 96,  197, 167, 91,  29,  81,  52,  10,  202, 81,  81,  89,  81,  244,
      52,  78,  239, 123, 6,   164, 186, 91,  170, 46,  135, 134, 126, 199, 118, 153, 32,  82,  181, 130, 97,  16,  36,
      71,  105, 227, 148, 138, 122, 32,  47,  42,  79,  221, 25,  181, 231, 99,  42,  143, 174, 182, 93,  2,   78,  171,
      7,   219, 132, 57,  75,  74,  240, 73,  74,  27,  184, 35,  212, 18,  28,  0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   41,  0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      191, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   250, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   154, 0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   59,  88,  129, 148, 228, 191, 104, 163, 157, 23,  67,  202, 171, 1,   187, 132, 216, 233, 152, 231,
      35,  94,  25,  209, 79,  152, 207, 103, 192, 169, 42,  60,  124, 140, 183, 224, 53,  162, 7,   3,   162, 9,   232,
      156, 216, 180, 34,  155, 202, 88,  44,  91,  190, 221, 38,  95,  62,  131, 1,   74,  238, 174, 200, 201, 75,  127,
      125, 131, 76,  132, 62,  169, 211, 173, 29,  142, 162, 226, 237, 166, 252, 12,  85,  164, 76,  228, 23,  126, 189,
      203, 51,  135, 76,  90,  195, 89,  55,  206, 231, 7,   52,  61,  128, 87,  134, 243, 203, 46,  5,   243, 241, 228,
      17,  58,  75,  143, 228, 13,  151, 205, 194, 62,  50,  124, 223, 59,  178, 201, 0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   64,  0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   240, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   220, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   181, 0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   27,  129, 9,   241, 214, 241, 177, 110, 63,  215, 104, 118, 117, 137, 89,  16,  57,  46,  13,
      243, 20,  65,  209, 35,  241, 127, 117, 161, 71,  37,  89,  10,  38,  19,  120, 137, 198, 143, 240, 74,  240, 119,
      242, 50,  64,  47,  111, 226, 49,  141, 215, 219, 212, 113, 119, 98,  168, 185, 174, 172, 89,  86,  245, 26,  120,
      155, 12,  209, 131, 232, 147, 65,  181, 184, 75,  185, 195, 10,  62,  174, 77,  194, 129, 30,  48,  247, 199, 251,
      35,  143, 162, 80,  26,  11,  117, 12,  46,  75,  215, 114, 127, 34,  211, 133, 244, 233, 117, 75,  5,   201, 47,
      120, 197, 250, 223, 104, 4,   36,  5,   248, 12,  62,  48,  249, 91,  116, 145, 57,  0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   18,  0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   46,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   232, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   213, 0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   121, 104, 191, 33,  158, 12,  138, 107, 70,  105, 110, 189, 17,  58,  112, 45,  178, 110,
      72,  31,  80,  249, 54,  76,  45,  54,  88,  114, 213, 240, 248, 70,  216, 191, 217, 26,  215, 88,  23,  49,  246,
      162, 196, 131, 157, 233, 42,  78,  235, 228, 215, 217, 77,  70,  29,  236, 125, 148, 124, 139, 205, 177, 118, 13,
      93,  44,  62,  155, 86,  190, 219, 230, 13,  193, 174, 233, 35,  14,  107, 61,  83,  181, 89,  198, 200, 127, 161,
      58,  79,  18,  152, 157, 74,  241, 93,  241, 102, 35,  254, 142, 116, 215, 252, 242, 124, 98,  178, 243, 172, 158,
      144, 108, 201, 24,  202, 243, 114, 35,  74,  0,   70,  78,  28,  46,  52,  213, 195, 159, 0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   76,  0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   162, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   68,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   42,  0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 3, 4, 33}, {2, 3, 2, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 3, 2, 1, 32, 32}, {2, 3, 4, 33}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape1_fp16_1) {
  uint16_t data[1] = {15298};
  uint16_t ret[1 * 1 * 16 * 16] = {
      15298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {1}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 16, 16}, {1}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape1_fp16_2) {
  uint16_t data[15] = {
      14396, 15084, 15205, 15113, 14336, 13738, 15301, 15244, 11605, 12532, 12476, 12812, 15042, 14469, 14447,
  };

  uint16_t ret[1 * 1 * 16 * 16] = {
      14396, 15084, 15205, 15113, 14336, 13738, 15301, 15244, 11605, 12532, 12476, 12812, 15042, 14469, 14447, 0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {15}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 16, 16}, {15}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape1_fp16_17) {
  uint16_t data[17] = {
      12414, 14598, 9916,  13501, 14162, 10687, 14114, 13019, 15344,
      14505, 14443, 14429, 14846, 14810, 14866, 14155, 11389,
  };
  uint16_t ret[2 * 1 * 16 * 16] = {
      12414, 14598, 9916, 13501, 14162, 10687, 14114, 13019, 15344, 14505, 14443, 14429, 14846, 14810, 14866, 14155, 0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     11389, 0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {17}, {2, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 1, 16, 16}, {17}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape2_fp16_lt_cube) {
  uint16_t data[1 * 1] = {
      15298,
  };
  uint16_t ret[1 * 1 * 16 * 16] = {
      15298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {1, 1}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 16, 16}, {1, 1}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape2_fp16_eq_cube) {
  uint16_t data[16 * 16] = {
      15023, 14612, 15081, 12835, 14874, 15149, 13652, 15110, 14848, 14036, 13512, 14386, 11849, 14530, 13828, 13930,
      14380, 14759, 13350, 15216, 14638, 12730, 14545, 15337, 14680, 12383, 9617,  13410, 13531, 14910, 14039, 15353,
      14827, 14388, 15312, 13804, 14042, 15127, 14739, 12524, 11523, 15063, 12156, 10173, 14850, 13303, 14890, 14409,
      12562, 11147, 15040, 14602, 14800, 14806, 14556, 15295, 14799, 15345, 14531, 15101, 15258, 12423, 14116, 13513,
      15023, 9054,  13172, 14555, 15170, 13835, 13291, 15211, 13469, 14362, 12255, 11921, 15103, 14972, 13437, 14769,
      14376, 14253, 14829, 12051, 15240, 15318, 14845, 13541, 15126, 13757, 12055, 14772, 12652, 7449,  12143, 14846,
      13031, 15287, 14828, 14525, 12504, 12700, 13977, 14559, 15086, 12995, 14136, 14313, 14534, 14824, 11548, 12033,
      14358, 14592, 15360, 12312, 13607, 11532, 12772, 11878, 14546, 13322, 14124, 13507, 15044, 15012, 14657, 14341,
      15088, 14846, 14957, 14860, 14826, 13977, 14557, 14106, 10848, 13691, 14355, 15078, 14355, 11530, 11720, 13849,
      13692, 14786, 6425,  13848, 8909,  10261, 13502, 12837, 12819, 11658, 15035, 11295, 14190, 14923, 12409, 14470,
      10467, 14903, 14952, 13936, 12559, 14967, 8628,  13685, 12665, 13643, 13720, 15137, 10802, 12425, 12274, 15259,
      15030, 14501, 14943, 12473, 15254, 13442, 13908, 14537, 10579, 15249, 14514, 14834, 14371, 12354, 14397, 14764,
      14343, 15326, 11343, 13873, 14873, 13394, 14522, 14173, 9848,  14347, 13027, 13164, 14692, 14342, 11434, 15144,
      15346, 14809, 15330, 14318, 13783, 13595, 15112, 14847, 14366, 14770, 14573, 12783, 10261, 13906, 13933, 14975,
      14484, 14586, 14058, 13779, 14595, 14540, 12425, 15070, 14434, 15048, 14875, 12944, 13621, 13993, 10807, 14620,
      13771, 13421, 15224, 14947, 13752, 14836, 14124, 13230, 14185, 15145, 15082, 14819, 12868, 14462, 14960, 13543,
  };
  uint16_t ret[1 * 1 * 16 * 16] = {
      15023, 14612, 15081, 12835, 14874, 15149, 13652, 15110, 14848, 14036, 13512, 14386, 11849, 14530, 13828, 13930,
      14380, 14759, 13350, 15216, 14638, 12730, 14545, 15337, 14680, 12383, 9617,  13410, 13531, 14910, 14039, 15353,
      14827, 14388, 15312, 13804, 14042, 15127, 14739, 12524, 11523, 15063, 12156, 10173, 14850, 13303, 14890, 14409,
      12562, 11147, 15040, 14602, 14800, 14806, 14556, 15295, 14799, 15345, 14531, 15101, 15258, 12423, 14116, 13513,
      15023, 9054,  13172, 14555, 15170, 13835, 13291, 15211, 13469, 14362, 12255, 11921, 15103, 14972, 13437, 14769,
      14376, 14253, 14829, 12051, 15240, 15318, 14845, 13541, 15126, 13757, 12055, 14772, 12652, 7449,  12143, 14846,
      13031, 15287, 14828, 14525, 12504, 12700, 13977, 14559, 15086, 12995, 14136, 14313, 14534, 14824, 11548, 12033,
      14358, 14592, 15360, 12312, 13607, 11532, 12772, 11878, 14546, 13322, 14124, 13507, 15044, 15012, 14657, 14341,
      15088, 14846, 14957, 14860, 14826, 13977, 14557, 14106, 10848, 13691, 14355, 15078, 14355, 11530, 11720, 13849,
      13692, 14786, 6425,  13848, 8909,  10261, 13502, 12837, 12819, 11658, 15035, 11295, 14190, 14923, 12409, 14470,
      10467, 14903, 14952, 13936, 12559, 14967, 8628,  13685, 12665, 13643, 13720, 15137, 10802, 12425, 12274, 15259,
      15030, 14501, 14943, 12473, 15254, 13442, 13908, 14537, 10579, 15249, 14514, 14834, 14371, 12354, 14397, 14764,
      14343, 15326, 11343, 13873, 14873, 13394, 14522, 14173, 9848,  14347, 13027, 13164, 14692, 14342, 11434, 15144,
      15346, 14809, 15330, 14318, 13783, 13595, 15112, 14847, 14366, 14770, 14573, 12783, 10261, 13906, 13933, 14975,
      14484, 14586, 14058, 13779, 14595, 14540, 12425, 15070, 14434, 15048, 14875, 12944, 13621, 13993, 10807, 14620,
      13771, 13421, 15224, 14947, 13752, 14836, 14124, 13230, 14185, 15145, 15082, 14819, 12868, 14462, 14960, 13543,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {16, 16}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {1, 1, 16, 16}, {16, 16}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape2_fp16_bt_cube) {
  uint16_t data[17 * 17] = {
      13662, 14610, 14474, 14923, 14368, 14666, 15104, 14562, 13724, 15218, 15128, 12691, 12533, 15299, 13238, 15205,
      13707, 14975, 11272, 9758,  15355, 14665, 14185, 15145, 12189, 12080, 15238, 11535, 12583, 13443, 14808, 9307,
      12003, 13952, 14663, 14717, 15005, 15046, 14935, 12887, 14334, 15267, 13781, 11960, 11527, 13839, 14623, 12042,
      15032, 12200, 15331, 15099, 11710, 15344, 13350, 12958, 15026, 15009, 14975, 15168, 15308, 14891, 10173, 15178,
      13484, 14803, 5640,  15097, 14876, 14466, 14321, 14769, 14030, 14593, 13651, 14915, 14939, 14129, 14266, 15353,
      14176, 14033, 14899, 15295, 13806, 15335, 14704, 13453, 13973, 14946, 14778, 13658, 13817, 12284, 15310, 14573,
      15092, 11556, 14010, 15285, 15224, 14415, 14416, 14267, 13769, 15087, 14703, 14785, 14997, 13715, 15240, 14832,
      12986, 10470, 14585, 12599, 14580, 15148, 15224, 15198, 14689, 15220, 14893, 15210, 14395, 12158, 14983, 11536,
      14766, 14352, 14730, 10461, 13677, 13519, 14250, 14910, 14798, 13310, 15315, 8482,  12198, 14496, 10964, 12832,
      15159, 15277, 14356, 15267, 14255, 13964, 14685, 12434, 13629, 12445, 14936, 13465, 13457, 15203, 13259, 12179,
      11561, 13570, 14219, 12253, 15191, 12973, 14491, 12556, 11324, 13478, 13908, 15148, 13858, 12349, 15093, 13225,
      14566, 11695, 14521, 14990, 13768, 13051, 13170, 13388, 14859, 12443, 15160, 14516, 13247, 12775, 13522, 14360,
      14664, 14986, 12542, 14363, 15271, 14422, 13573, 14342, 15206, 14705, 15095, 13836, 15212, 14619, 13880, 14634,
      15114, 12986, 14256, 14717, 15024, 15131, 14527, 12591, 13944, 14605, 14441, 14800, 12477, 13455, 14527, 14968,
      13970, 12611, 14455, 15221, 14419, 13924, 15268, 13875, 13521, 14872, 14614, 12206, 15235, 11125, 14982, 14509,
      15098, 14978, 12263, 14535, 13207, 14490, 15225, 14878, 14757, 14951, 12629, 13027, 11620, 14371, 14146, 14833,
      11001, 14672, 14658, 13925, 14528, 14290, 14456, 14173, 14949, 12333, 12236, 13683, 15116, 14828, 13426, 15322,
      13277, 15314, 14786, 14703, 13890, 14661, 10342, 14796, 13330, 14998, 14403, 14078, 14871, 11508, 14323, 11436,
      14368,
  };
  uint16_t ret[2 * 2 * 16 * 16] = {
      13662, 14610, 14474, 14923, 14368, 14666, 15104, 14562, 13724, 15218, 15128, 12691, 12533, 15299, 13238, 15205,
      14975, 11272, 9758,  15355, 14665, 14185, 15145, 12189, 12080, 15238, 11535, 12583, 13443, 14808, 9307,  12003,
      14663, 14717, 15005, 15046, 14935, 12887, 14334, 15267, 13781, 11960, 11527, 13839, 14623, 12042, 15032, 12200,
      15099, 11710, 15344, 13350, 12958, 15026, 15009, 14975, 15168, 15308, 14891, 10173, 15178, 13484, 14803, 5640,
      14876, 14466, 14321, 14769, 14030, 14593, 13651, 14915, 14939, 14129, 14266, 15353, 14176, 14033, 14899, 15295,
      15335, 14704, 13453, 13973, 14946, 14778, 13658, 13817, 12284, 15310, 14573, 15092, 11556, 14010, 15285, 15224,
      14416, 14267, 13769, 15087, 14703, 14785, 14997, 13715, 15240, 14832, 12986, 10470, 14585, 12599, 14580, 15148,
      15198, 14689, 15220, 14893, 15210, 14395, 12158, 14983, 11536, 14766, 14352, 14730, 10461, 13677, 13519, 14250,
      14798, 13310, 15315, 8482,  12198, 14496, 10964, 12832, 15159, 15277, 14356, 15267, 14255, 13964, 14685, 12434,
      12445, 14936, 13465, 13457, 15203, 13259, 12179, 11561, 13570, 14219, 12253, 15191, 12973, 14491, 12556, 11324,
      13908, 15148, 13858, 12349, 15093, 13225, 14566, 11695, 14521, 14990, 13768, 13051, 13170, 13388, 14859, 12443,
      14516, 13247, 12775, 13522, 14360, 14664, 14986, 12542, 14363, 15271, 14422, 13573, 14342, 15206, 14705, 15095,
      15212, 14619, 13880, 14634, 15114, 12986, 14256, 14717, 15024, 15131, 14527, 12591, 13944, 14605, 14441, 14800,
      13455, 14527, 14968, 13970, 12611, 14455, 15221, 14419, 13924, 15268, 13875, 13521, 14872, 14614, 12206, 15235,
      14982, 14509, 15098, 14978, 12263, 14535, 13207, 14490, 15225, 14878, 14757, 14951, 12629, 13027, 11620, 14371,
      14833, 11001, 14672, 14658, 13925, 14528, 14290, 14456, 14173, 14949, 12333, 12236, 13683, 15116, 14828, 13426,
      13277, 15314, 14786, 14703, 13890, 14661, 10342, 14796, 13330, 14998, 14403, 14078, 14871, 11508, 14323, 11436,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13707, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13952, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15331, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15097, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13806, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14415, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15224, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14910, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13629, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13478, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15160, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13836, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12477, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      11125, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14146, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15322, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14368, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {17, 17}, {2, 2, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 2, 16, 16}, {17, 17}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape2_fp16_bt_cube2) {
  uint16_t data[15 * 17] = {
      13984, 15309, 14687, 15012, 13546, 5757,  13664, 14888, 13415, 11619, 14844, 15296, 14527, 14740, 14202, 13892,
      13612, 13694, 12624, 14353, 14717, 12610, 15259, 15005, 14785, 14505, 12518, 14368, 14784, 13988, 13606, 15051,
      14421, 9956,  15157, 13565, 13482, 15032, 10603, 15251, 14966, 13910, 9878,  15249, 14559, 15056, 14339, 13208,
      13714, 15162, 13749, 15001, 14643, 14293, 13792, 9517,  13732, 12938, 15180, 14149, 12330, 14026, 14678, 11979,
      9373,  12142, 14542, 14979, 12248, 14923, 14068, 13732, 14410, 13366, 13795, 12315, 14444, 14806, 15145, 14416,
      15079, 15012, 14635, 14751, 14345, 15327, 10808, 15195, 14788, 12895, 12271, 12437, 12297, 11606, 14954, 14753,
      14131, 14014, 15312, 15018, 15178, 14950, 13521, 15063, 15165, 14438, 14535, 15350, 13133, 14331, 13157, 14667,
      15093, 13472, 14155, 14407, 14958, 11307, 14806, 13644, 9861,  14927, 14574, 14727, 14888, 14474, 14027, 12409,
      15054, 10922, 12313, 13337, 13645, 14812, 14635, 14200, 13674, 13863, 12255, 14175, 13494, 15287, 14981, 13635,
      14259, 14517, 11989, 13467, 11705, 14539, 15304, 13791, 10817, 14220, 14849, 13068, 13337, 11710, 15034, 15188,
      14799, 15214, 14798, 13523, 14919, 15292, 13676, 14603, 10039, 15268, 14717, 11092, 11533, 14989, 14516, 13759,
      13459, 14620, 14159, 13090, 14814, 15344, 15153, 14214, 14683, 15251, 14676, 13381, 15126, 15346, 13542, 14744,
      15055, 14232, 14670, 10211, 13648, 15156, 14030, 12342, 13609, 14376, 13477, 14579, 15173, 15276, 14864, 15294,
      13281, 11630, 9285,  14847, 13219, 14664, 15252, 14198, 15213, 13443, 12339, 14079, 13788, 15304, 14932, 15346,
      15208, 14305, 15259, 11820, 15067, 10837, 11285, 11989, 15032, 11854, 14738, 14365, 13529, 14699, 14273, 12198,
      14542, 12227, 15360, 14999, 10498, 14782, 14549, 14651, 11737, 14529, 15044, 14735, 10683, 15355, 14630,
  };
  uint16_t ret[2 * 1 * 16 * 16] = {
      13984, 15309, 14687, 15012, 13546, 5757,  13664, 14888, 13415, 11619, 14844, 15296, 14527, 14740, 14202, 13892,
      13694, 12624, 14353, 14717, 12610, 15259, 15005, 14785, 14505, 12518, 14368, 14784, 13988, 13606, 15051, 14421,
      15157, 13565, 13482, 15032, 10603, 15251, 14966, 13910, 9878,  15249, 14559, 15056, 14339, 13208, 13714, 15162,
      15001, 14643, 14293, 13792, 9517,  13732, 12938, 15180, 14149, 12330, 14026, 14678, 11979, 9373,  12142, 14542,
      12248, 14923, 14068, 13732, 14410, 13366, 13795, 12315, 14444, 14806, 15145, 14416, 15079, 15012, 14635, 14751,
      15327, 10808, 15195, 14788, 12895, 12271, 12437, 12297, 11606, 14954, 14753, 14131, 14014, 15312, 15018, 15178,
      13521, 15063, 15165, 14438, 14535, 15350, 13133, 14331, 13157, 14667, 15093, 13472, 14155, 14407, 14958, 11307,
      13644, 9861,  14927, 14574, 14727, 14888, 14474, 14027, 12409, 15054, 10922, 12313, 13337, 13645, 14812, 14635,
      13674, 13863, 12255, 14175, 13494, 15287, 14981, 13635, 14259, 14517, 11989, 13467, 11705, 14539, 15304, 13791,
      14220, 14849, 13068, 13337, 11710, 15034, 15188, 14799, 15214, 14798, 13523, 14919, 15292, 13676, 14603, 10039,
      14717, 11092, 11533, 14989, 14516, 13759, 13459, 14620, 14159, 13090, 14814, 15344, 15153, 14214, 14683, 15251,
      13381, 15126, 15346, 13542, 14744, 15055, 14232, 14670, 10211, 13648, 15156, 14030, 12342, 13609, 14376, 13477,
      15173, 15276, 14864, 15294, 13281, 11630, 9285,  14847, 13219, 14664, 15252, 14198, 15213, 13443, 12339, 14079,
      15304, 14932, 15346, 15208, 14305, 15259, 11820, 15067, 10837, 11285, 11989, 15032, 11854, 14738, 14365, 13529,
      14273, 12198, 14542, 12227, 15360, 14999, 10498, 14782, 14549, 14651, 11737, 14529, 15044, 14735, 10683, 15355,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13612, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      9956,  0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13749, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14979, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14345, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14950, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14806, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14200, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      10817, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15268, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14676, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14579, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13788, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14699, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14630, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {15, 17}, {2, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 1, 16, 16}, {15, 17}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape3_fp16) {
  uint16_t data[2 * 4 * 17] = {
      14048, 10542, 14296, 15275, 13485, 13171, 14457, 13836, 14419, 14642, 13846, 12295, 15267, 13606, 10887, 14342,
      13293, 14639, 14817, 14463, 15081, 14824, 14599, 14053, 14711, 14912, 15249, 15327, 15131, 13504, 9495,  12905,
      10185, 12650, 12423, 14293, 13922, 13335, 15249, 14355, 12930, 7097,  14121, 14494, 13242, 14305, 15180, 15272,
      12432, 11561, 8031,  13089, 14898, 13582, 11267, 14449, 14847, 11742, 15349, 14744, 14773, 15270, 15198, 11861,
      14172, 14523, 13865, 12930, 12860, 14823, 13583, 14664, 13818, 14550, 14743, 15228, 13850, 15114, 13699, 14964,
      14785, 14490, 11593, 14639, 14924, 14457, 14903, 15036, 15076, 4349,  15271, 13926, 14913, 15078, 9526,  13779,
      14572, 13331, 15246, 13603, 14729, 14508, 14948, 15226, 15171, 13050, 13602, 15051, 12979, 11946, 15219, 12984,
      12561, 14049, 14910, 14352, 15356, 12397, 15046, 14445, 14555, 13245, 14687, 14424, 13651, 13615, 9557,  15190,
      10581, 14783, 9610,  14871, 13393, 14193, 15217, 14855,
  };
  uint16_t ret[2 * 2 * 1 * 16 * 16] = {
      14048, 10542, 14296, 15275, 13485, 13171, 14457, 13836, 14419, 14642, 13846, 12295, 15267, 13606, 10887, 14342,
      14639, 14817, 14463, 15081, 14824, 14599, 14053, 14711, 14912, 15249, 15327, 15131, 13504, 9495,  12905, 10185,
      12423, 14293, 13922, 13335, 15249, 14355, 12930, 7097,  14121, 14494, 13242, 14305, 15180, 15272, 12432, 11561,
      13089, 14898, 13582, 11267, 14449, 14847, 11742, 15349, 14744, 14773, 15270, 15198, 11861, 14172, 14523, 13865,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13293, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12650, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      8031,  0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12930, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12860, 14823, 13583, 14664, 13818, 14550, 14743, 15228, 13850, 15114, 13699, 14964, 14785, 14490, 11593, 14639,
      14457, 14903, 15036, 15076, 4349,  15271, 13926, 14913, 15078, 9526,  13779, 14572, 13331, 15246, 13603, 14729,
      14948, 15226, 15171, 13050, 13602, 15051, 12979, 11946, 15219, 12984, 12561, 14049, 14910, 14352, 15356, 12397,
      14445, 14555, 13245, 14687, 14424, 13651, 13615, 9557,  15190, 10581, 14783, 9610,  14871, 13393, 14193, 15217,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14924, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14508, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15046, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14855, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  FormatTransferFractalNz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 4, 17}, {2, 2, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalNzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 2, 1, 16, 16}, {2, 4, 17}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape4_fp16) {
  uint16_t data[2 * 2 * 17 * 4] = {
      12210, 13522, 12430, 13868, 14463, 12261, 12394, 15327, 14988, 14663, 14310, 12308, 14886, 15036, 13655, 12774,
      13715, 13322, 13198, 14931, 14944, 10231, 14824, 14512, 14493, 14936, 14513, 14481, 13061, 14808, 14637, 13011,
      15351, 15277, 13709, 9313,  14684, 14460, 14576, 13978, 14945, 13652, 14162, 12974, 11122, 15207, 14677, 12431,
      14361, 14347, 14675, 12983, 14020, 13429, 13678, 14861, 14016, 13590, 13322, 9523,  10130, 15338, 11862, 15194,
      14545, 14488, 14159, 15192, 13563, 14782, 13852, 7998,  14920, 12686, 14363, 13754, 14350, 13814, 15258, 14156,
      14198, 14849, 13955, 15126, 13663, 14033, 14483, 12880, 14765, 12977, 14017, 14881, 10395, 14950, 13676, 12497,
      11587, 13427, 14507, 12408, 14615, 12010, 14586, 13531, 9126,  14077, 12947, 13723, 15185, 15262, 15288, 14608,
      15211, 13514, 12745, 14905, 14579, 14199, 14990, 15012, 13932, 13096, 13995, 10413, 9657,  13398, 15304, 10993,
      13516, 14415, 11920, 13584, 13772, 15204, 14925, 14462, 12207, 14373, 14882, 10069, 13641, 12941, 13577, 13330,
      14191, 13926, 13325, 13662, 13478, 14251, 13212, 15161, 14471, 14691, 13904, 12831, 14277, 14566, 14577, 14575,
      12646, 15218, 13438, 13827, 15323, 15245, 12022, 13928, 13358, 15286, 14556, 14414, 12664, 11754, 13737, 15360,
      14533, 14148, 15259, 14354, 14253, 15358, 13804, 13513, 14825, 13973, 14492, 14943, 15124, 14221, 13908, 12768,
      14923, 14801, 15134, 13681, 15313, 10562, 8965,  14670, 15028, 13264, 14901, 14973, 14120, 12946, 13663, 13418,
      9930,  15264, 13267, 11311, 14857, 15204, 14787, 14466, 11394, 14305, 14712, 11728, 14401, 13790, 15359, 15108,
      13342, 15088, 14348, 12047, 14544, 13244, 15299, 14790, 14565, 14827, 12551, 12386, 15074, 13453, 10206, 14530,
      14922, 11713, 14811, 12342, 14867, 13452, 12332, 11289, 15105, 14896, 15182, 14087, 11717, 14525, 12705, 15096,
      13561, 15094, 13168, 15007, 14888, 14556, 15156, 14829, 12482, 14449, 14379, 14233, 12640, 15000, 13268, 15342,
  };
  uint16_t ret[2 * 2 * 1 * 2 * 16 * 16] = {
      12210, 13522, 12430, 13868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14463, 12261, 12394, 15327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14988, 14663, 14310, 12308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14886, 15036, 13655, 12774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13715, 13322, 13198, 14931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14944, 10231, 14824, 14512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14493, 14936, 14513, 14481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13061, 14808, 14637, 13011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15351, 15277, 13709, 9313,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14684, 14460, 14576, 13978, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14945, 13652, 14162, 12974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11122, 15207, 14677, 12431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14361, 14347, 14675, 12983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14020, 13429, 13678, 14861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14016, 13590, 13322, 9523,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      10130, 15338, 11862, 15194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14545, 14488, 14159, 15192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13563, 14782, 13852, 7998,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14920, 12686, 14363, 13754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14350, 13814, 15258, 14156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14198, 14849, 13955, 15126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13663, 14033, 14483, 12880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14765, 12977, 14017, 14881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      10395, 14950, 13676, 12497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11587, 13427, 14507, 12408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14615, 12010, 14586, 13531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      9126,  14077, 12947, 13723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15185, 15262, 15288, 14608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15211, 13514, 12745, 14905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14579, 14199, 14990, 15012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13932, 13096, 13995, 10413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      9657,  13398, 15304, 10993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13516, 14415, 11920, 13584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13772, 15204, 14925, 14462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12207, 14373, 14882, 10069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13641, 12941, 13577, 13330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14191, 13926, 13325, 13662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13478, 14251, 13212, 15161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14471, 14691, 13904, 12831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14277, 14566, 14577, 14575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12646, 15218, 13438, 13827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15323, 15245, 12022, 13928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13358, 15286, 14556, 14414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12664, 11754, 13737, 15360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14533, 14148, 15259, 14354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14253, 15358, 13804, 13513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14825, 13973, 14492, 14943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15124, 14221, 13908, 12768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14923, 14801, 15134, 13681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15313, 10562, 8965,  14670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15028, 13264, 14901, 14973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14120, 12946, 13663, 13418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      9930,  15264, 13267, 11311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14857, 15204, 14787, 14466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11394, 14305, 14712, 11728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14401, 13790, 15359, 15108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13342, 15088, 14348, 12047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14544, 13244, 15299, 14790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14565, 14827, 12551, 12386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15074, 13453, 10206, 14530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14922, 11713, 14811, 12342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14867, 13452, 12332, 11289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15105, 14896, 15182, 14087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11717, 14525, 12705, 15096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13561, 15094, 13168, 15007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14888, 14556, 15156, 14829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12482, 14449, 14379, 14233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12640, 15000, 13268, 15342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 2, 17, 4}, {2, 2, 1, 2, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 2, 1, 2, 16, 16}, {2, 2, 17, 4}, DT_FLOAT16};
  TransResult result2;
  FormatTransferFractalNzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
  EXPECT_EQ(
      transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape),
      UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape5_fp16) {
  uint16_t data[2 * 2 * 2 * 17 * 4] = {
      13556, 15090, 13431, 15346, 14703, 12989, 14001, 12860, 13575, 12502, 14798, 15138, 14631, 12157, 14835, 15238,
      12694, 15169, 15085, 14099, 14607, 12480, 14215, 13775, 14927, 11856, 15337, 14506, 14543, 7807,  14832, 10676,
      13073, 13826, 14517, 14412, 13708, 14177, 15000, 13601, 13602, 13334, 12356, 14735, 12911, 13328, 15254, 10387,
      15178, 14461, 14904, 10405, 14517, 15036, 15269, 11255, 11794, 14079, 13985, 14900, 15348, 14743, 10052, 13384,
      15316, 15335, 14157, 13419, 11505, 13544, 12810, 14669, 12757, 15333, 14752, 15037, 15145, 13280, 13592, 10910,
      14744, 13751, 12814, 14982, 14472, 15305, 14934, 15110, 14994, 15006, 14992, 15265, 11530, 14069, 15037, 8437,
      14039, 15081, 12730, 14487, 15310, 13424, 14573, 12558, 14849, 14986, 11413, 13644, 12642, 13521, 13799, 14189,
      11610, 14352, 14088, 13861, 14593, 14717, 14329, 13764, 13170, 13856, 13098, 14325, 14698, 14849, 12469, 14720,
      14304, 14576, 14982, 14447, 14757, 12881, 13558, 14911, 14554, 14337, 14352, 14555, 14389, 12870, 13010, 13167,
      13268, 14942, 14911, 15197, 8206,  14737, 14671, 14054, 14813, 12949, 14572, 15021, 12855, 13987, 12985, 14355,
      15062, 13801, 14908, 12510, 13709, 15026, 12941, 15232, 13479, 15154, 14795, 14828, 13822, 13856, 14727, 12783,
      13970, 14933, 15262, 14714, 11584, 12866, 15210, 14814, 11503, 14593, 15172, 14393, 10815, 13132, 14913, 14604,
      14181, 14879, 14672, 14774, 14897, 13458, 11012, 13005, 13111, 13352, 14459, 11855, 14548, 13371, 14764, 14338,
      13650, 13757, 12772, 15167, 13692, 14370, 15212, 14216, 13461, 10527, 14846, 15332, 14618, 14004, 13418, 15285,
      15229, 10738, 12875, 12084, 14031, 12661, 15150, 14428, 13571, 14880, 14502, 10309, 12040, 14806, 14822, 13210,
      14393, 14655, 15005, 13270, 14886, 10217, 14173, 13759, 14735, 12563, 12367, 10329, 14646, 12655, 14272, 12609,
      15237, 12138, 14607, 14227, 15165, 13831, 14258, 13192, 15224, 11343, 13923, 13314, 15272, 12291, 14374, 14475,
      14371, 13431, 13291, 12922, 10251, 13184, 13515, 14492, 14766, 14170, 12844, 11903, 13872, 14757, 14971, 14913,
      15144, 13792, 11809, 11480, 14205, 14657, 12875, 15073, 13630, 13329, 14373, 13506, 14163, 15304, 13232, 14395,
      14460, 13353, 15082, 14870, 12710, 13103, 13336, 12321, 12647, 15168, 14898, 13728, 12686, 14789, 15240, 14579,
      14397, 15174, 14279, 14121, 11157, 14978, 13277, 12842, 14598, 15286, 13462, 14271, 14094, 14960, 13514, 14075,
      12637, 14892, 14818, 15027, 15014, 15357, 14838, 14989, 12848, 15091, 13763, 13669, 15239, 14462, 14615, 15082,
      14330, 13958, 14246, 15207, 14803, 15161, 12998, 13896, 12147, 14778, 15046, 13333, 14858, 15355, 15162, 12372,
      13517, 13776, 14294, 14426, 14045, 14515, 13986, 14662, 14177, 14523, 13650, 15292, 14592, 14360, 14693, 14678,
      13446, 14333, 11799, 12098, 8510,  10784, 13598, 14546, 14495, 12675, 13347, 8987,  13801, 12245, 10710, 15308,
      15007, 10601, 15296, 13662, 11378, 13952, 13798, 12348, 11870, 13585, 14267, 14469, 14754, 13968, 14876, 14450,
      15165, 14067, 14933, 12365, 15338, 14738, 13092, 13725, 14389, 14073, 14400, 13726, 15150, 14789, 15266, 15153,
      15205, 14654, 14273, 9239,  15187, 14684, 12777, 14878, 8817,  15316, 14618, 14897, 14279, 14911, 15207, 12417,
      15259, 14703, 14236, 15065, 14220, 11487, 15283, 14223, 15250, 15049, 14920, 15189, 14776, 13008, 15171, 15003,
      13927, 13856, 14854, 12342, 15219, 13735, 15170, 15203, 13618, 11929, 14821, 15149, 15123, 14251, 14990, 11703,
      14754, 13892, 13407, 13905, 14442, 14741, 14178, 13100, 15285, 13124, 15017, 15054, 14027, 13320, 13337, 15204,
      13910, 13596, 14558, 14393, 14669, 13791, 14094, 14617, 13563, 15187, 13985, 11905, 14285, 14040, 11892, 12635,
      14749, 15181, 14808, 12451, 14639, 15123, 14346, 15036, 12163, 15157, 14339, 13836, 14722, 14431, 14497, 13198,
      11770, 11317, 13766, 14760, 14773, 14848, 14593, 13575, 11623, 14680, 13875, 14539, 14379, 14348, 15332, 14475,
  };
  uint16_t ret[2 * 2 * 2 * 1 * 2 * 16 * 16] = {
      13556, 15090, 13431, 15346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14703, 12989, 14001, 12860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13575, 12502, 14798, 15138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14631, 12157, 14835, 15238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12694, 15169, 15085, 14099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14607, 12480, 14215, 13775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14927, 11856, 15337, 14506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14543, 7807,  14832, 10676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13073, 13826, 14517, 14412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13708, 14177, 15000, 13601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13602, 13334, 12356, 14735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12911, 13328, 15254, 10387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15178, 14461, 14904, 10405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14517, 15036, 15269, 11255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11794, 14079, 13985, 14900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15348, 14743, 10052, 13384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15316, 15335, 14157, 13419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11505, 13544, 12810, 14669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12757, 15333, 14752, 15037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15145, 13280, 13592, 10910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14744, 13751, 12814, 14982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14472, 15305, 14934, 15110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14994, 15006, 14992, 15265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11530, 14069, 15037, 8437,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14039, 15081, 12730, 14487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15310, 13424, 14573, 12558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14849, 14986, 11413, 13644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12642, 13521, 13799, 14189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11610, 14352, 14088, 13861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14593, 14717, 14329, 13764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13170, 13856, 13098, 14325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14698, 14849, 12469, 14720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14304, 14576, 14982, 14447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14757, 12881, 13558, 14911, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14554, 14337, 14352, 14555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14389, 12870, 13010, 13167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13268, 14942, 14911, 15197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      8206,  14737, 14671, 14054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14813, 12949, 14572, 15021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12855, 13987, 12985, 14355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15062, 13801, 14908, 12510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13709, 15026, 12941, 15232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13479, 15154, 14795, 14828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13822, 13856, 14727, 12783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13970, 14933, 15262, 14714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11584, 12866, 15210, 14814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11503, 14593, 15172, 14393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      10815, 13132, 14913, 14604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14181, 14879, 14672, 14774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14897, 13458, 11012, 13005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13111, 13352, 14459, 11855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14548, 13371, 14764, 14338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13650, 13757, 12772, 15167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13692, 14370, 15212, 14216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13461, 10527, 14846, 15332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14618, 14004, 13418, 15285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15229, 10738, 12875, 12084, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14031, 12661, 15150, 14428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13571, 14880, 14502, 10309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12040, 14806, 14822, 13210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14393, 14655, 15005, 13270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14886, 10217, 14173, 13759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14735, 12563, 12367, 10329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14646, 12655, 14272, 12609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15237, 12138, 14607, 14227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15165, 13831, 14258, 13192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15224, 11343, 13923, 13314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15272, 12291, 14374, 14475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14371, 13431, 13291, 12922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      10251, 13184, 13515, 14492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14766, 14170, 12844, 11903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13872, 14757, 14971, 14913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15144, 13792, 11809, 11480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14205, 14657, 12875, 15073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13630, 13329, 14373, 13506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14163, 15304, 13232, 14395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14460, 13353, 15082, 14870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12710, 13103, 13336, 12321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12647, 15168, 14898, 13728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12686, 14789, 15240, 14579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14397, 15174, 14279, 14121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11157, 14978, 13277, 12842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14598, 15286, 13462, 14271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14094, 14960, 13514, 14075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12637, 14892, 14818, 15027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15014, 15357, 14838, 14989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12848, 15091, 13763, 13669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15239, 14462, 14615, 15082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14330, 13958, 14246, 15207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14803, 15161, 12998, 13896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12147, 14778, 15046, 13333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14858, 15355, 15162, 12372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13517, 13776, 14294, 14426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14045, 14515, 13986, 14662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14177, 14523, 13650, 15292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14592, 14360, 14693, 14678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13446, 14333, 11799, 12098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      8510,  10784, 13598, 14546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14495, 12675, 13347, 8987,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13801, 12245, 10710, 15308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15007, 10601, 15296, 13662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11378, 13952, 13798, 12348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11870, 13585, 14267, 14469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14754, 13968, 14876, 14450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15165, 14067, 14933, 12365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15338, 14738, 13092, 13725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14389, 14073, 14400, 13726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15150, 14789, 15266, 15153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15205, 14654, 14273, 9239,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15187, 14684, 12777, 14878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      8817,  15316, 14618, 14897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14279, 14911, 15207, 12417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15259, 14703, 14236, 15065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14220, 11487, 15283, 14223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15250, 15049, 14920, 15189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14776, 13008, 15171, 15003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13927, 13856, 14854, 12342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15219, 13735, 15170, 15203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13618, 11929, 14821, 15149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15123, 14251, 14990, 11703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14754, 13892, 13407, 13905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14442, 14741, 14178, 13100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15285, 13124, 15017, 15054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14027, 13320, 13337, 15204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13910, 13596, 14558, 14393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14669, 13791, 14094, 14617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13563, 15187, 13985, 11905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14285, 14040, 11892, 12635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14749, 15181, 14808, 12451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14639, 15123, 14346, 15036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12163, 15157, 14339, 13836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14722, 14431, 14497, 13198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11770, 11317, 13766, 14760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14773, 14848, 14593, 13575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11623, 14680, 13875, 14539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14379, 14348, 15332, 14475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 2, 2, 17, 4},
                 {2, 2, 2, 1, 2, 16, 16},           DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND,
                  {2, 2, 2, 1, 2, 16, 16},          {2, 2, 2, 17, 4},  DT_FLOAT16};
  TransResult result2;
  FormatTransferFractalNzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nd_shape4_fp32) {
  float data[2 * 2 * 17 * 4] = {
      0.24017745833005677,   0.7908338513866925,   0.5051460913827948,   0.9212520685117512,   0.4329735845708327,
      0.9207470159046747,    0.05926231862060216,  0.76990655686985,     0.7223645626864388,   0.43501433129012024,
      0.40570186933951713,   0.702542637118438,    0.773774946386804,    0.04265471007054322,  0.2989896038480955,
      0.4033603882338742,    0.34393668393267907,  0.5850246556661213,   0.6750891081060844,   0.3559427848582608,
      0.43614052169082185,   0.6908271139843668,   0.5897294883672143,   0.35488198940932736,  0.4682340192505966,
      0.9113037459116056,    0.7443829866997046,   0.89433687460791,     0.31510061278863843,  0.20044500575711433,
      0.28142410758015657,   0.4517900601137299,   0.6351885056619392,   0.8974159512127593,   0.3331668058021574,
      0.11222970046456449,   0.8732340412519595,   0.2148878909636669,   0.33598072192817896,  0.5817085292780417,
      0.14893294317017536,   0.5551645528327099,   0.9796426641977305,   0.9568166955425949,   0.7718066236111724,
      0.6300751765176865,    0.8497117123321973,   0.3534708093622494,   0.7657382003166453,   0.587899478133755,
      0.7784779515613647,    0.4015232698113339,   0.9254034195951792,   0.9806776040632871,   0.7398963961756377,
      0.4717105017726926,    0.13075121515420907,  0.26501153374416997,  0.4592668571870513,   0.38083145381689754,
      0.5048080389976721,    0.8316384355591627,   0.016176084697146043, 0.3500580014319852,   0.2494321620580643,
      0.8363651463924084,    0.39040381268116464,  0.41421765968696656,  0.2296129377253905,   0.3795273985435502,
      0.49840831219300297,   0.5660689163115291,   0.5410166356568628,   0.2932118573951793,   0.7231596801124212,
      0.7615642755162464,    0.5700242312079427,   0.015282443180747451, 0.6074141579987347,   0.606840341727317,
      0.7958320122497057,    0.46657383708965916,  0.9198103681172877,   0.7466699920139369,   0.8798355998800057,
      0.5490826769093224,    0.1569764914287578,   0.631652567858096,    0.07538015959634248,  0.30771430912374564,
      0.801341360218133,     0.4112029724744082,   0.24872460704563282,  0.7988220100765487,   0.8956893776310078,
      0.3523457305677019,    0.7607249251896161,   0.9508908308534454,   0.9844149475432433,   0.46137662395819556,
      0.3361994725719326,    0.910215423356587,    0.8514253530131357,   0.18564786925351284,  0.031197422157041577,
      0.32088308811207233,   0.5268494210366956,   0.37652532271007444,  0.018319746627926126, 0.6805316533631041,
      0.6637986306311675,    0.8682215174258817,   0.9928743926162217,   0.11762205726513975,  0.6195005538182846,
      0.573208212736639,     0.5325639815459885,   0.8685720994574258,   0.30416206083796893,  0.29375443689500746,
      0.722600953459129,     0.060879922974677037, 0.5516867775841858,   0.7282801588163559,   0.1544836784918584,
      0.41799093214709193,   0.980749303446289,    0.43370624352513687,  0.36172612101052615,  0.3028306626687869,
      0.2230506430289495,    0.05431581276922193,  0.7968231625249534,   0.8068938615817157,   0.45578821844224493,
      0.0018389569240472303, 0.12845645761430868,  0.43174872314200496,  0.19019706886091625,  0.7206755294822818,
      0.31089686267676875,   0.34478094342047017,  0.20388910753878797,  0.9013725029423029,   0.20172359299220255,
      0.1629922568981731,    0.6954990727866708,   0.26497630445509435,  0.12379402401488193,  0.6447543753857757,
      0.32969746233649067,   0.4546871355393207,   0.9032509525867825,   0.9858786808247757,   0.4862602610112142,
      0.08219085113577962,   0.7870912428425353,   0.9013772471762193,   0.09947185442909168,  0.8752347829007687,
      0.39322080280348903,   0.38553330390114127,  0.815521169321101,    0.25465238460393447,  0.7719638078574547,
      0.3681634855586098,    0.12917191531069916,  0.8782893607825132,   0.31538202975647667,  0.11060152128642453,
      0.8877996039186895,    0.6277653065585466,   0.788572654306122,    0.8473770431762598,   0.06733131234431977,
      0.8257265623261241,    0.7358077509239135,   0.6897284238471844,   0.16316388905274182,  0.6419388952410704,
      0.46373928769713935,   0.22624570338477634,  0.8344650905883917,   0.5220387776690497,   0.8223957140404234,
      0.8522442229878241,    0.914872169915326,    0.9507088797212623,   0.5886632711634477,   0.18329757039598793,
      0.43052254564266745,   0.3273224327191193,   0.7027336757262003,   0.6825647115162772,   0.9175905076205535,
      0.5938919379015825,    0.05279831332678442,  0.9610878906434714,   0.8151949508556603,   0.9200058002592004,
      0.4101544181795893,    0.09912168423937695,  0.17364500943816064,  0.4429247543426651,   0.14062873380913987,
      0.23738371369937172,   0.4938182494622466,   0.28673035611440445,  0.6816179119575762,   0.5172878882496988,
      0.7506142571467134,    0.32139544952437704,  0.3032752890874719,   0.8444155718538534,   0.8331913949169982,
      0.5432084580245907,    0.07799994151132295,  0.6807639318778701,   0.22042219816817854,  0.9407382759228957,
      0.847128737153653,     0.393277915570015,    0.36572620008744783,  0.9932234924651848,   0.980452452787659,
      0.09199460655585212,   0.2040881385507629,   0.6416200216420471,   0.3163820661665575,   0.0178114452425554,
      0.19209600193274623,   0.56386270765364,     0.5883501002605002,   0.047290373739652725, 0.9429035695153023,
      0.29861798784711935,   0.8987397733067158,   0.31081233810078046,  0.32273697333672224,  0.6123857767652331,
      0.47907753776865447,   0.38230796360390273,  0.015510368346530967, 0.10606747306100672,  0.5930796121652361,
      0.3716827365867703,    0.6965466612015544,   0.9129958695419979,   0.13740941341338297,  0.6057045902472779,
      0.795600140320669,     0.9353438814017689,   0.7814345681667847,   0.6606618076700961,   0.15167442010087617,
      0.3024865384516856,    0.4121791513857548,   0.8073450149573994,   0.16939447194962576,  0.05472329091313577,
      0.7853320936770362,    0.7413721006805821,   0.7875008545125217,   0.949175848170841,    0.13480031206099008,
      0.6583276122829612,    0.3606029738996872,   0.3139689644221102,   0.18118778976359917,  0.5639618456607737,
      0.8471462699161201,    0.5527251348233345,
  };
  float ret[2 * 2 * 1 * 2 * 16 * 16] = {
      0.24017745833005677,
      0.7908338513866925,
      0.5051460913827948,
      0.9212520685117512,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4329735845708327,
      0.9207470159046747,
      0.05926231862060216,
      0.76990655686985,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7223645626864388,
      0.43501433129012024,
      0.40570186933951713,
      0.702542637118438,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.773774946386804,
      0.04265471007054322,
      0.2989896038480955,
      0.4033603882338742,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.34393668393267907,
      0.5850246556661213,
      0.6750891081060844,
      0.3559427848582608,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.43614052169082185,
      0.6908271139843668,
      0.5897294883672143,
      0.35488198940932736,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4682340192505966,
      0.9113037459116056,
      0.7443829866997046,
      0.89433687460791,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.31510061278863843,
      0.20044500575711433,
      0.28142410758015657,
      0.4517900601137299,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6351885056619392,
      0.8974159512127593,
      0.3331668058021574,
      0.11222970046456449,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8732340412519595,
      0.2148878909636669,
      0.33598072192817896,
      0.5817085292780417,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.14893294317017536,
      0.5551645528327099,
      0.9796426641977305,
      0.9568166955425949,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7718066236111724,
      0.6300751765176865,
      0.8497117123321973,
      0.3534708093622494,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7657382003166453,
      0.587899478133755,
      0.7784779515613647,
      0.4015232698113339,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9254034195951792,
      0.9806776040632871,
      0.7398963961756377,
      0.4717105017726926,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.13075121515420907,
      0.26501153374416997,
      0.4592668571870513,
      0.38083145381689754,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5048080389976721,
      0.8316384355591627,
      0.016176084697146043,
      0.3500580014319852,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.2494321620580643,
      0.8363651463924084,
      0.39040381268116464,
      0.41421765968696656,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.2296129377253905,
      0.3795273985435502,
      0.49840831219300297,
      0.5660689163115291,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5410166356568628,
      0.2932118573951793,
      0.7231596801124212,
      0.7615642755162464,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5700242312079427,
      0.015282443180747451,
      0.6074141579987347,
      0.606840341727317,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7958320122497057,
      0.46657383708965916,
      0.9198103681172877,
      0.7466699920139369,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8798355998800057,
      0.5490826769093224,
      0.1569764914287578,
      0.631652567858096,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.07538015959634248,
      0.30771430912374564,
      0.801341360218133,
      0.4112029724744082,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.24872460704563282,
      0.7988220100765487,
      0.8956893776310078,
      0.3523457305677019,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7607249251896161,
      0.9508908308534454,
      0.9844149475432433,
      0.46137662395819556,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3361994725719326,
      0.910215423356587,
      0.8514253530131357,
      0.18564786925351284,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.031197422157041577,
      0.32088308811207233,
      0.5268494210366956,
      0.37652532271007444,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.018319746627926126,
      0.6805316533631041,
      0.6637986306311675,
      0.8682215174258817,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9928743926162217,
      0.11762205726513975,
      0.6195005538182846,
      0.573208212736639,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5325639815459885,
      0.8685720994574258,
      0.30416206083796893,
      0.29375443689500746,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.722600953459129,
      0.060879922974677037,
      0.5516867775841858,
      0.7282801588163559,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.1544836784918584,
      0.41799093214709193,
      0.980749303446289,
      0.43370624352513687,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.36172612101052615,
      0.3028306626687869,
      0.2230506430289495,
      0.05431581276922193,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7968231625249534,
      0.8068938615817157,
      0.45578821844224493,
      0.0018389569240472303,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.12845645761430868,
      0.43174872314200496,
      0.19019706886091625,
      0.7206755294822818,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.31089686267676875,
      0.34478094342047017,
      0.20388910753878797,
      0.9013725029423029,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.20172359299220255,
      0.1629922568981731,
      0.6954990727866708,
      0.26497630445509435,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.12379402401488193,
      0.6447543753857757,
      0.32969746233649067,
      0.4546871355393207,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9032509525867825,
      0.9858786808247757,
      0.4862602610112142,
      0.08219085113577962,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7870912428425353,
      0.9013772471762193,
      0.09947185442909168,
      0.8752347829007687,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.39322080280348903,
      0.38553330390114127,
      0.815521169321101,
      0.25465238460393447,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7719638078574547,
      0.3681634855586098,
      0.12917191531069916,
      0.8782893607825132,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.31538202975647667,
      0.11060152128642453,
      0.8877996039186895,
      0.6277653065585466,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.788572654306122,
      0.8473770431762598,
      0.06733131234431977,
      0.8257265623261241,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7358077509239135,
      0.6897284238471844,
      0.16316388905274182,
      0.6419388952410704,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.46373928769713935,
      0.22624570338477634,
      0.8344650905883917,
      0.5220387776690497,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8223957140404234,
      0.8522442229878241,
      0.914872169915326,
      0.9507088797212623,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5886632711634477,
      0.18329757039598793,
      0.43052254564266745,
      0.3273224327191193,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7027336757262003,
      0.6825647115162772,
      0.9175905076205535,
      0.5938919379015825,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.05279831332678442,
      0.9610878906434714,
      0.8151949508556603,
      0.9200058002592004,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4101544181795893,
      0.09912168423937695,
      0.17364500943816064,
      0.4429247543426651,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.14062873380913987,
      0.23738371369937172,
      0.4938182494622466,
      0.28673035611440445,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6816179119575762,
      0.5172878882496988,
      0.7506142571467134,
      0.32139544952437704,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3032752890874719,
      0.8444155718538534,
      0.8331913949169982,
      0.5432084580245907,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.07799994151132295,
      0.6807639318778701,
      0.22042219816817854,
      0.9407382759228957,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.847128737153653,
      0.393277915570015,
      0.36572620008744783,
      0.9932234924651848,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.980452452787659,
      0.09199460655585212,
      0.2040881385507629,
      0.6416200216420471,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3163820661665575,
      0.0178114452425554,
      0.19209600193274623,
      0.56386270765364,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5883501002605002,
      0.047290373739652725,
      0.9429035695153023,
      0.29861798784711935,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8987397733067158,
      0.31081233810078046,
      0.32273697333672224,
      0.6123857767652331,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.47907753776865447,
      0.38230796360390273,
      0.015510368346530967,
      0.10606747306100672,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5930796121652361,
      0.3716827365867703,
      0.6965466612015544,
      0.9129958695419979,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.13740941341338297,
      0.6057045902472779,
      0.795600140320669,
      0.9353438814017689,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7814345681667847,
      0.6606618076700961,
      0.15167442010087617,
      0.3024865384516856,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4121791513857548,
      0.8073450149573994,
      0.16939447194962576,
      0.05472329091313577,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7853320936770362,
      0.7413721006805821,
      0.7875008545125217,
      0.949175848170841,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.13480031206099008,
      0.6583276122829612,
      0.3606029738996872,
      0.3139689644221102,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.18118778976359917,
      0.5639618456607737,
      0.8471462699161201,
      0.5527251348233345,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_NZ, {2, 2, 17, 4}, {2, 2, 1, 2, 16, 16}, DT_FLOAT};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_ND, {2, 2, 1, 2, 16, 16}, {2, 2, 17, 4}, DT_FLOAT};
  TransResult result2;
  FormatTransferFractalNzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nchw_shape4_fp32) {
  float data[2 * 2 * 17 * 4] = {
      0.5602121231402468,    0.12800383781971492,  0.5326714230167173,   0.6272243646573483,   0.02789503350921596,
      0.6760986699314114,    0.8240135711596471,   0.34248414683295103,  0.7280572978193823,   0.03408620931709949,
      0.17897548862797752,   0.049319216130346066, 0.5285626554498787,   0.6543935963248121,   0.9499835158011221,
      0.15696623695207612,   0.5518593327582763,   0.735480571158555,    0.27252722389251094,  0.5952131357932664,
      0.9342664862715897,    0.06807185097642088,  0.7986155333967675,   0.2940533147166918,   0.7717279809493778,
      0.06500681776149064,   0.40209523004375736,  0.6402504455119793,   0.7183356244742499,   0.8848092118855054,
      0.9623394724948869,    0.6404196604920734,   0.3129415157617603,   0.6566440258339626,   0.4829961676502589,
      0.9095794636705585,    0.38431275502739315,  0.6618934269256913,   0.016948846804644813, 0.8487902640408118,
      0.0019437036739571312, 0.9593039469007972,   0.7369345068397335,   0.8038376866300426,   0.23733142070927404,
      0.6766568636607861,    0.8791428417567961,   0.34970553354412104,  0.7767111731260719,   0.36939908341858885,
      0.8877771223343094,    0.16656518085775396,  0.40524411235449553,  0.5094980580412446,   0.42932740059809227,
      0.4806992101733476,    0.942893176736217,    0.7569186327365722,   0.43762218258484487,  0.5709277573723915,
      0.6626357139000086,    0.9388125948827755,   0.6922120795940312,   0.2802353109920688,   0.6384950189782832,
      0.8203631774543025,    0.4819185524506592,   0.5612388571573312,   0.7890794105898543,   0.026657068661979144,
      0.36745236086958255,   0.09421420582014717,  0.4125170256726969,   0.8372759010112841,   0.6858892915066466,
      0.055965911139327695,  0.733752513401978,    0.2860600524805865,   0.24581639133981414,  0.4657602259317729,
      0.9844669862500401,    0.04259392169423548,  0.2850934545160856,   0.6116234365122941,   0.8431280227198134,
      0.09330478841127465,   0.10738171141015296,  0.8058302145583697,   0.1887687053820234,   0.020772300699924195,
      0.2675743523191082,    0.509425440737449,    0.7454162260498424,   0.3601811686584533,   0.6356766970010271,
      0.08368780784222996,   0.7954204147818181,   0.6808861341529187,   0.9732894436382853,   0.028456208873444133,
      0.6898670482181255,    0.5602400644580263,   0.007835682106110964, 0.3126424433906586,   0.5461294624203212,
      0.24974364067650745,   0.3225823914937893,   0.5003866335569956,   0.661414559901519,    0.6611594211086985,
      0.0832376382837211,    0.6088151725555888,   0.31350612996189475,  0.6824719404358928,   0.8962030999552082,
      0.5898412128782159,    0.6192600820436853,   0.7065475830586582,   0.47775907849535804,  0.9872123954283326,
      0.5794892396998665,    0.9821886556152676,   0.5938251530775381,   0.30404687707509925,  0.03598332590135811,
      0.43853593213910447,   0.42005264249981566,  0.27092494528759103,  0.5857315286790321,   0.3453845905764671,
      0.38938830465869656,   0.2686851760469917,   0.6080813798369535,   0.8975830535375084,   0.16063980186497728,
      0.6586597679036962,    0.34853632098020637,  0.5222409587324605,   0.34629031735429283,  0.9571001776320724,
      0.22758512028439548,   0.4961198993089996,   0.7035427414896834,   0.9873475820942967,   0.9225755101854336,
      0.4345542179267431,    0.5826852296872961,   0.3959711566516181,   0.8959668161588287,   0.5781473185927918,
      0.15770465606442519,   0.2465330879179335,   0.9967009535833719,   0.7209513334268077,   0.3050224221409039,
      0.9219568626656348,    0.718546385528138,    0.21647873996460432,  0.9485312530824154,   0.7544823112339518,
      0.8793678793431775,    0.5321808027467093,   0.44421663094592234,  0.3540210579398514,   0.5201311798545218,
      0.42005202877685466,   0.9185755141210294,   0.2513817846312163,   0.2726794018274953,   0.4146719265832651,
      0.9556854071727073,    0.34185681700133563,  0.23008112912632606,  0.5530759925523093,   0.1287401965557975,
      0.9329184289796552,    0.597049889010525,    0.6117591325403197,   0.4119313490448945,   0.3232267846716024,
      0.20173136300954464,   0.6002148229523541,   0.7815012855520117,   0.28544406461634386,  0.8269928516978476,
      0.10932038205185535,   0.6143160563886838,   0.2184224010482163,   0.5522809330115714,   0.5677845896560437,
      0.8579879882249971,    0.6355837987328417,   0.04362984397169789,  0.7754836644431609,   0.1431977287912315,
      0.6092936034964014,    0.4596033225489746,   0.3592578817865715,   0.553616658068951,    0.19183381195695703,
      0.45079770418260423,   0.2799744643950717,   0.6432910866105234,   0.08411912299187807,  0.6745840838964664,
      0.07598087848264623,   0.8240250634502845,   0.36570374341381084,  0.006762919216348862, 0.7968845960590147,
      0.02514782044366326,   0.3068699746421577,   0.1138875791627122,   0.4292015547916156,   0.3153636011167973,
      0.9394545926418999,    0.5658737300910498,   0.5162676744048261,   0.06243779693597862,  0.6687945075056573,
      0.6108948588331585,    0.251069063724365,    0.9194382362252776,   0.427182897606301,    0.2859283493741377,
      0.47567202696913746,   0.4158263080352007,   0.13267581511787707,  0.7282071557718046,   0.1269283431875673,
      0.3225554819437485,    0.3474737724799578,   0.9174000239171781,   0.575526441418363,    0.6424082388100079,
      0.7795858447358935,    0.4961176629005909,   0.7783772378271568,   0.42736590566493216,  0.47753749552007785,
      0.1624392018841635,    0.028751267485759735, 0.32060419387936456,  0.9219882035969446,   0.8615631839985258,
      0.769906654883067,     0.8950660850360729,   0.5997750400061773,   0.7849875817664871,   0.4668319723460155,
      0.395114919896967,     0.8253563646816371,   0.07626413874831572,  0.11553536946297527,  0.5967093302357965,
      0.6250874863042443,    0.9295880168076048,   0.09201501553706759,  0.4002992747710562,   0.5020954829641272,
      0.8107293478061589,    0.7991328274514402,   0.14082794482093408,  0.19565070959320263,  0.8149919267700367,
      0.9462274058046314,    0.7109368887841762,   0.3664044938712081,   0.9577840290332994,   0.134161476174524,
      0.08818671344845908,   0.6137505449578752,
  };
  float ret[2 * 2 * 1 * 2 * 16 * 16] = {
      0.5602121231402468,
      0.12800383781971492,
      0.5326714230167173,
      0.6272243646573483,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.02789503350921596,
      0.6760986699314114,
      0.8240135711596471,
      0.34248414683295103,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7280572978193823,
      0.03408620931709949,
      0.17897548862797752,
      0.049319216130346066,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5285626554498787,
      0.6543935963248121,
      0.9499835158011221,
      0.15696623695207612,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5518593327582763,
      0.735480571158555,
      0.27252722389251094,
      0.5952131357932664,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9342664862715897,
      0.06807185097642088,
      0.7986155333967675,
      0.2940533147166918,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7717279809493778,
      0.06500681776149064,
      0.40209523004375736,
      0.6402504455119793,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7183356244742499,
      0.8848092118855054,
      0.9623394724948869,
      0.6404196604920734,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3129415157617603,
      0.6566440258339626,
      0.4829961676502589,
      0.9095794636705585,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.38431275502739315,
      0.6618934269256913,
      0.016948846804644813,
      0.8487902640408118,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0019437036739571312,
      0.9593039469007972,
      0.7369345068397335,
      0.8038376866300426,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.23733142070927404,
      0.6766568636607861,
      0.8791428417567961,
      0.34970553354412104,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7767111731260719,
      0.36939908341858885,
      0.8877771223343094,
      0.16656518085775396,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.40524411235449553,
      0.5094980580412446,
      0.42932740059809227,
      0.4806992101733476,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.942893176736217,
      0.7569186327365722,
      0.43762218258484487,
      0.5709277573723915,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6626357139000086,
      0.9388125948827755,
      0.6922120795940312,
      0.2802353109920688,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6384950189782832,
      0.8203631774543025,
      0.4819185524506592,
      0.5612388571573312,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7890794105898543,
      0.026657068661979144,
      0.36745236086958255,
      0.09421420582014717,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4125170256726969,
      0.8372759010112841,
      0.6858892915066466,
      0.055965911139327695,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.733752513401978,
      0.2860600524805865,
      0.24581639133981414,
      0.4657602259317729,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9844669862500401,
      0.04259392169423548,
      0.2850934545160856,
      0.6116234365122941,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8431280227198134,
      0.09330478841127465,
      0.10738171141015296,
      0.8058302145583697,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.1887687053820234,
      0.020772300699924195,
      0.2675743523191082,
      0.509425440737449,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7454162260498424,
      0.3601811686584533,
      0.6356766970010271,
      0.08368780784222996,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7954204147818181,
      0.6808861341529187,
      0.9732894436382853,
      0.028456208873444133,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6898670482181255,
      0.5602400644580263,
      0.007835682106110964,
      0.3126424433906586,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5461294624203212,
      0.24974364067650745,
      0.3225823914937893,
      0.5003866335569956,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.661414559901519,
      0.6611594211086985,
      0.0832376382837211,
      0.6088151725555888,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.31350612996189475,
      0.6824719404358928,
      0.8962030999552082,
      0.5898412128782159,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6192600820436853,
      0.7065475830586582,
      0.47775907849535804,
      0.9872123954283326,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5794892396998665,
      0.9821886556152676,
      0.5938251530775381,
      0.30404687707509925,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.03598332590135811,
      0.43853593213910447,
      0.42005264249981566,
      0.27092494528759103,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5857315286790321,
      0.3453845905764671,
      0.38938830465869656,
      0.2686851760469917,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6080813798369535,
      0.8975830535375084,
      0.16063980186497728,
      0.6586597679036962,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.34853632098020637,
      0.5222409587324605,
      0.34629031735429283,
      0.9571001776320724,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.22758512028439548,
      0.4961198993089996,
      0.7035427414896834,
      0.9873475820942967,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9225755101854336,
      0.4345542179267431,
      0.5826852296872961,
      0.3959711566516181,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8959668161588287,
      0.5781473185927918,
      0.15770465606442519,
      0.2465330879179335,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9967009535833719,
      0.7209513334268077,
      0.3050224221409039,
      0.9219568626656348,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.718546385528138,
      0.21647873996460432,
      0.9485312530824154,
      0.7544823112339518,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8793678793431775,
      0.5321808027467093,
      0.44421663094592234,
      0.3540210579398514,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5201311798545218,
      0.42005202877685466,
      0.9185755141210294,
      0.2513817846312163,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.2726794018274953,
      0.4146719265832651,
      0.9556854071727073,
      0.34185681700133563,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.23008112912632606,
      0.5530759925523093,
      0.1287401965557975,
      0.9329184289796552,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.597049889010525,
      0.6117591325403197,
      0.4119313490448945,
      0.3232267846716024,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.20173136300954464,
      0.6002148229523541,
      0.7815012855520117,
      0.28544406461634386,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8269928516978476,
      0.10932038205185535,
      0.6143160563886838,
      0.2184224010482163,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5522809330115714,
      0.5677845896560437,
      0.8579879882249971,
      0.6355837987328417,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.04362984397169789,
      0.7754836644431609,
      0.1431977287912315,
      0.6092936034964014,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4596033225489746,
      0.3592578817865715,
      0.553616658068951,
      0.19183381195695703,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.45079770418260423,
      0.2799744643950717,
      0.6432910866105234,
      0.08411912299187807,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6745840838964664,
      0.07598087848264623,
      0.8240250634502845,
      0.36570374341381084,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.006762919216348862,
      0.7968845960590147,
      0.02514782044366326,
      0.3068699746421577,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.1138875791627122,
      0.4292015547916156,
      0.3153636011167973,
      0.9394545926418999,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5658737300910498,
      0.5162676744048261,
      0.06243779693597862,
      0.6687945075056573,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6108948588331585,
      0.251069063724365,
      0.9194382362252776,
      0.427182897606301,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.2859283493741377,
      0.47567202696913746,
      0.4158263080352007,
      0.13267581511787707,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7282071557718046,
      0.1269283431875673,
      0.3225554819437485,
      0.3474737724799578,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9174000239171781,
      0.575526441418363,
      0.6424082388100079,
      0.7795858447358935,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4961176629005909,
      0.7783772378271568,
      0.42736590566493216,
      0.47753749552007785,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.1624392018841635,
      0.028751267485759735,
      0.32060419387936456,
      0.9219882035969446,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8615631839985258,
      0.769906654883067,
      0.8950660850360729,
      0.5997750400061773,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7849875817664871,
      0.4668319723460155,
      0.395114919896967,
      0.8253563646816371,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.07626413874831572,
      0.11553536946297527,
      0.5967093302357965,
      0.6250874863042443,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9295880168076048,
      0.09201501553706759,
      0.4002992747710562,
      0.5020954829641272,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8107293478061589,
      0.7991328274514402,
      0.14082794482093408,
      0.19565070959320263,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8149919267700367,
      0.9462274058046314,
      0.7109368887841762,
      0.3664044938712081,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9577840290332994,
      0.134161476174524,
      0.08818671344845908,
      0.6137505449578752,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NCHW, FORMAT_FRACTAL_NZ, {2, 2, 17, 4}, {2, 2, 1, 2, 16, 16}, DT_FLOAT};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_NCHW, {2, 2, 1, 2, 16, 16}, {2, 2, 17, 4}, DT_FLOAT};
  TransResult result2;
  FormatTransferFractalNzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, nhwc_shape4_fp32) {
  float data[2 * 2 * 4 * 17] = {
      0.011873719514500558, 0.9055337066931509,   0.4007962186879912,   0.4823248697007644,   0.434413711781758,
      0.3374081761653097,   0.1327889293124861,   0.9573280427327941,   0.900157174839599,    0.22675418134305847,
      0.915880789401114,    0.2858704345543902,   0.9538630233786596,   0.7750326328379964,   0.6241316443191395,
      0.9671130471718147,   0.4519972100893155,   0.27178741914922444,  0.9858432029701361,   0.19476602256637698,
      0.3880385111012623,   0.4904599528435152,   0.7763741995316538,   0.595041172451146,    0.7697729614020185,
      0.9008648456464086,   0.10660640559911716,  0.9872130150760993,   0.8863345663931051,   0.42187474552924187,
      0.890712319631421,    0.8511675560554783,   0.49085053954474256,  0.6393638683917573,   0.7753996529731574,
      0.4520989748269998,   0.8049570752479891,   0.8587842070040622,   0.8086535260498522,   0.2874426357486748,
      0.4655016269762732,   0.2966483939283724,   0.034319962943348825, 0.8204809948347593,   0.009691641525112815,
      0.08010193588797776,  0.965026232132812,    0.7971692934454786,   0.8820844501303087,   0.3328045944663507,
      0.18561195288144405,  0.07216530096679319,  0.005908780438422023, 0.06520472370046182,  0.14742586552942527,
      0.1584733061658462,   0.40478873960253803,  0.8517076637562077,   0.38362604730995475,  0.6242972689768637,
      0.8029032121893791,   0.9087739592614803,   0.4937699233327367,   0.45546332276267887,  0.798105153390389,
      0.1314550983849262,   0.2591920182847739,   0.9114933413684086,   0.3414109593297737,   0.026092765672044882,
      0.2931518007384959,   0.8469358330691886,   0.47102665902579355,  0.40483320725316896,  0.12104263689198036,
      0.7610259859295765,   0.18319775575048725,  0.9581675087575537,   0.6023459738089741,   0.9770086789537543,
      0.32030513714161946,  0.9998097997775989,   0.9030541284918164,   0.929507484163007,    0.5701279464990141,
      0.485477868042418,    0.10576997065572546,  0.9869010419984975,   0.7601188774307379,   0.7299650375549,
      0.47395049565443736,  0.2987941122063468,   0.28780906999224076,  0.5007695250663617,   0.9980887820922187,
      0.6505062822604325,   0.2551175826121026,   0.8805142041510927,   0.540881304210333,    0.512165946641996,
      0.7391492488205184,   0.5349603795874779,   0.8477996679763127,   0.36974774843557734,  0.5386600638597664,
      0.8265820196734138,   0.8331013533783092,   0.3184354327418504,   0.21196431290299877,  0.0007803293886190499,
      0.9031099441741426,   0.7338031418981182,   0.4181974944656337,   0.9475100023819251,   0.9164113945149563,
      0.9880971962092363,   0.971369242048584,    0.46347470842977934,  0.514856183416368,    0.5806407538118334,
      0.47403794573443647,  0.4983463935801685,   0.10528401666738596,  0.1526320361717619,   0.28061664920854257,
      0.30961878366674567,  0.44923363657730486,  0.9484407824169037,   0.5159122159882427,   0.5167660592705424,
      0.7367297318467558,   0.5538203882599549,   0.4506813979810824,   0.2442886238881219,   0.759900709991574,
      0.6650499928247546,   0.48708807614210625,  0.15306454148232096,  0.06357296925269262,  0.32107378247726914,
      0.4549262540499909,   0.5730762333418195,   0.657776134839074,    0.46288302719843766,  0.47841000194019123,
      0.44891897033375505,  0.10930401547813162,  0.24339407947523917,  0.12836594551381142,  0.6934045473476478,
      0.3961572539291023,   0.26876738129298816,  0.3666361092088235,   0.021036984332677644, 0.8996511029257301,
      0.8028217206118277,   0.02125903018390507,  0.02961138398355878,  0.6235739131455775,   0.6760579858568656,
      0.5857480476460779,   0.01234894215599136,  0.932659669453309,    0.5769971719464481,   0.4431403578173735,
      0.6210058271168252,   0.44512130009247053,  0.1256576731684177,   0.7554367685462694,   0.4552800403309736,
      0.5782247194165684,   0.9378829346189987,   0.4767719439722925,   0.588459429493016,    0.38309400222741374,
      0.45826986645737,     0.6923380843272136,   0.910198917887028,    0.27557533418495017,  0.5929635576694986,
      0.853359402144766,    0.7887863171140258,   0.6975730076388099,   0.46150867673575524,  0.8701541258470236,
      0.11825577576640478,  0.12613178124889635,  0.6295407278784825,   0.19813460927054138,  0.6415083047302164,
      0.6485982020831015,   0.503325917338586,    0.05296267036442437,  0.84952445870043,     0.45866219246495377,
      0.32768756890079054,  0.589085245208557,    0.34892536724353695,  0.91035413546058,     0.9880017939439389,
      0.40415901103861485,  0.578040771005287,    0.3959288005375471,   0.16148211530085899,  0.9318405934814316,
      0.6756677973943621,   0.4606385109370067,   0.905962237773528,    0.2177532221826981,   0.4261085792963576,
      0.980991006583082,    0.2412848972859596,   0.8431509870043342,   0.48095393083099247,  0.9748865288169085,
      0.7190166864903728,   0.013915463190590227, 0.1845161452237204,   0.9027340647387055,   0.661002921841787,
      0.27262309567650456,  0.980513934833282,    0.905065693190242,    0.48817348627366275,  0.5491844851920269,
      0.41304323921393715,  0.9759785094279378,   0.853997033979551,    0.002002500366118709, 0.6174459093057074,
      0.34462573854351475,  0.14693603152033852,  0.5662501103103056,   0.3249376766553893,   0.9306275547982649,
      0.859786096152122,    0.28218315978146635,  0.3279232246229644,   0.48861872218445535,  0.9233508569342559,
      0.05722530428945971,  0.9083781089398145,   0.4339485341608773,   0.7203410635948555,   0.8095638597988294,
      0.7400838811513829,   0.7086563132366934,   0.21415793475415057,  0.1710534847076408,   0.7560622473588406,
      0.5861151794417773,   0.886760410951225,    0.24883451496070186,  0.16786802676698942,  0.13821448342001896,
      0.5543758072261663,   0.23877866570604567,  0.5009385005089074,   0.5186822212396692,   0.2418401387392375,
      0.6913013072430841,   0.45462902660124316,  0.1971623092606769,   0.9959491383675012,   0.1351262179824929,
      0.8588580970731138,   0.1773361844666207,   0.3586325230242825,   0.8750229859703434,   0.26477337004803103,
      0.8958200538690423,   0.710860220058141,
  };
  float ret[2 * 2 * 1 * 2 * 16 * 16] = {
      0.011873719514500558,
      0.9055337066931509,
      0.4007962186879912,
      0.4823248697007644,
      0.434413711781758,
      0.3374081761653097,
      0.1327889293124861,
      0.9573280427327941,
      0.900157174839599,
      0.22675418134305847,
      0.915880789401114,
      0.2858704345543902,
      0.9538630233786596,
      0.7750326328379964,
      0.6241316443191395,
      0.9671130471718147,
      0.27178741914922444,
      0.9858432029701361,
      0.19476602256637698,
      0.3880385111012623,
      0.4904599528435152,
      0.7763741995316538,
      0.595041172451146,
      0.7697729614020185,
      0.9008648456464086,
      0.10660640559911716,
      0.9872130150760993,
      0.8863345663931051,
      0.42187474552924187,
      0.890712319631421,
      0.8511675560554783,
      0.49085053954474256,
      0.7753996529731574,
      0.4520989748269998,
      0.8049570752479891,
      0.8587842070040622,
      0.8086535260498522,
      0.2874426357486748,
      0.4655016269762732,
      0.2966483939283724,
      0.034319962943348825,
      0.8204809948347593,
      0.009691641525112815,
      0.08010193588797776,
      0.965026232132812,
      0.7971692934454786,
      0.8820844501303087,
      0.3328045944663507,
      0.07216530096679319,
      0.005908780438422023,
      0.06520472370046182,
      0.14742586552942527,
      0.1584733061658462,
      0.40478873960253803,
      0.8517076637562077,
      0.38362604730995475,
      0.6242972689768637,
      0.8029032121893791,
      0.9087739592614803,
      0.4937699233327367,
      0.45546332276267887,
      0.798105153390389,
      0.1314550983849262,
      0.2591920182847739,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4519972100893155,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6393638683917573,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.18561195288144405,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9114933413684086,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3414109593297737,
      0.026092765672044882,
      0.2931518007384959,
      0.8469358330691886,
      0.47102665902579355,
      0.40483320725316896,
      0.12104263689198036,
      0.7610259859295765,
      0.18319775575048725,
      0.9581675087575537,
      0.6023459738089741,
      0.9770086789537543,
      0.32030513714161946,
      0.9998097997775989,
      0.9030541284918164,
      0.929507484163007,
      0.485477868042418,
      0.10576997065572546,
      0.9869010419984975,
      0.7601188774307379,
      0.7299650375549,
      0.47395049565443736,
      0.2987941122063468,
      0.28780906999224076,
      0.5007695250663617,
      0.9980887820922187,
      0.6505062822604325,
      0.2551175826121026,
      0.8805142041510927,
      0.540881304210333,
      0.512165946641996,
      0.7391492488205184,
      0.8477996679763127,
      0.36974774843557734,
      0.5386600638597664,
      0.8265820196734138,
      0.8331013533783092,
      0.3184354327418504,
      0.21196431290299877,
      0.0007803293886190499,
      0.9031099441741426,
      0.7338031418981182,
      0.4181974944656337,
      0.9475100023819251,
      0.9164113945149563,
      0.9880971962092363,
      0.971369242048584,
      0.46347470842977934,
      0.5806407538118334,
      0.47403794573443647,
      0.4983463935801685,
      0.10528401666738596,
      0.1526320361717619,
      0.28061664920854257,
      0.30961878366674567,
      0.44923363657730486,
      0.9484407824169037,
      0.5159122159882427,
      0.5167660592705424,
      0.7367297318467558,
      0.5538203882599549,
      0.4506813979810824,
      0.2442886238881219,
      0.759900709991574,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5701279464990141,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5349603795874779,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.514856183416368,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6650499928247546,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.48708807614210625,
      0.15306454148232096,
      0.06357296925269262,
      0.32107378247726914,
      0.4549262540499909,
      0.5730762333418195,
      0.657776134839074,
      0.46288302719843766,
      0.47841000194019123,
      0.44891897033375505,
      0.10930401547813162,
      0.24339407947523917,
      0.12836594551381142,
      0.6934045473476478,
      0.3961572539291023,
      0.26876738129298816,
      0.021036984332677644,
      0.8996511029257301,
      0.8028217206118277,
      0.02125903018390507,
      0.02961138398355878,
      0.6235739131455775,
      0.6760579858568656,
      0.5857480476460779,
      0.01234894215599136,
      0.932659669453309,
      0.5769971719464481,
      0.4431403578173735,
      0.6210058271168252,
      0.44512130009247053,
      0.1256576731684177,
      0.7554367685462694,
      0.5782247194165684,
      0.9378829346189987,
      0.4767719439722925,
      0.588459429493016,
      0.38309400222741374,
      0.45826986645737,
      0.6923380843272136,
      0.910198917887028,
      0.27557533418495017,
      0.5929635576694986,
      0.853359402144766,
      0.7887863171140258,
      0.6975730076388099,
      0.46150867673575524,
      0.8701541258470236,
      0.11825577576640478,
      0.6295407278784825,
      0.19813460927054138,
      0.6415083047302164,
      0.6485982020831015,
      0.503325917338586,
      0.05296267036442437,
      0.84952445870043,
      0.45866219246495377,
      0.32768756890079054,
      0.589085245208557,
      0.34892536724353695,
      0.91035413546058,
      0.9880017939439389,
      0.40415901103861485,
      0.578040771005287,
      0.3959288005375471,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3666361092088235,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4552800403309736,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.12613178124889635,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.16148211530085899,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9318405934814316,
      0.6756677973943621,
      0.4606385109370067,
      0.905962237773528,
      0.2177532221826981,
      0.4261085792963576,
      0.980991006583082,
      0.2412848972859596,
      0.8431509870043342,
      0.48095393083099247,
      0.9748865288169085,
      0.7190166864903728,
      0.013915463190590227,
      0.1845161452237204,
      0.9027340647387055,
      0.661002921841787,
      0.980513934833282,
      0.905065693190242,
      0.48817348627366275,
      0.5491844851920269,
      0.41304323921393715,
      0.9759785094279378,
      0.853997033979551,
      0.002002500366118709,
      0.6174459093057074,
      0.34462573854351475,
      0.14693603152033852,
      0.5662501103103056,
      0.3249376766553893,
      0.9306275547982649,
      0.859786096152122,
      0.28218315978146635,
      0.48861872218445535,
      0.9233508569342559,
      0.05722530428945971,
      0.9083781089398145,
      0.4339485341608773,
      0.7203410635948555,
      0.8095638597988294,
      0.7400838811513829,
      0.7086563132366934,
      0.21415793475415057,
      0.1710534847076408,
      0.7560622473588406,
      0.5861151794417773,
      0.886760410951225,
      0.24883451496070186,
      0.16786802676698942,
      0.5543758072261663,
      0.23877866570604567,
      0.5009385005089074,
      0.5186822212396692,
      0.2418401387392375,
      0.6913013072430841,
      0.45462902660124316,
      0.1971623092606769,
      0.9959491383675012,
      0.1351262179824929,
      0.8588580970731138,
      0.1773361844666207,
      0.3586325230242825,
      0.8750229859703434,
      0.26477337004803103,
      0.8958200538690423,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.27262309567650456,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3279232246229644,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.13821448342001896,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.710860220058141,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NHWC, FORMAT_FRACTAL_NZ, {2, 2, 4, 17}, {2, 2, 2, 1, 16, 16}, DT_FLOAT};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_NZ, FORMAT_NHWC, {2, 2, 2, 1, 16, 16}, {2, 2, 4, 17}, DT_FLOAT};
  TransResult result2;
  FormatTransferFractalNzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractNz, invalid_src_shape) {
  uint16_t data[1 * 4 * 4 * 1] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NHWC, FORMAT_FRACTAL_NZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type) {
  uint16_t data[1 * 1 * 4 * 4] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_NHWC,
                 FORMAT_FRACTAL_NZ,
                 {
                     1,
                     1,
                     4,
                     4,
                 },
                 {1, 1, 1, 16, 16},
                 DT_UNDEFINED};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_src_format) {
  uint16_t data[1 * 1 * 4 * 4] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_HWCN,
                 FORMAT_FRACTAL_NZ,
                 {1, 1, 4, 4},
                 {1, 1, 1, 1, 16, 16},
                 DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            PARAM_INVALID);
  EXPECT_EQ(TransFormat(args, result), UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_dst_shape) {
  uint16_t data[1 * 1 * 4 * 4] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NHWC, FORMAT_FRACTAL_NZ, {1, 1, 4, 4}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_dst_shape2) {
  uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_FRACTAL_NZ, FORMAT_NHWC, {1, 1, 1, 1, 16, 16}, {1, 4, 4}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_src_data_type2) {
  uint16_t data[1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_FRACTAL_NZ,
                 FORMAT_NHWC,
                 {1, 1, 1, 16, 16},
                 {
                     1,
                     1,
                     4,
                     4,
                 },
                 DT_UNDEFINED};
  TransResult result;
  FormatTransferFractalNzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_dst_format2) {
  uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_FRACTAL_NZ,
                 FORMAT_HWCN,
                 {1, 1, 1, 1, 16, 16},
                 {1, 1, 4, 4},
                 DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(TransFormat(args, result), UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_src_shape2) {
  uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_FRACTAL_NZ, FORMAT_NHWC, {1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractNz, invalid_src_dst_shape_relation) {
  uint16_t data[1 * 1 * 2 * 1 * 16 * 16] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_FRACTAL_NZ,
                 FORMAT_NHWC,
                 {1, 1, 2, 1, 16, 16},
                 {1, 1, 17, 15},
                 DT_FLOAT16};
  TransResult result;
  FormatTransferFractalNzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}
}  // namespace formats
}  // namespace ge